Chinaunix首页 | 论坛 | 博客
  • 博客访问: 498818
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-21 13:40
个人简介

技术改变命运

文章分类

全部博文(184)

文章存档

2020年(16)

2017年(12)

2016年(156)

我的朋友

分类: C/C++

2016-07-09 22:28:44


点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {    
  5.     int i = 0;
  6.     int m = 0;
  7.     //char str[100];
  8.     
  9.     while (scanf("%d",&m))
  10.     {
  11.         char str[10][10];
  12.         for (i = 0;i < 5;i++)
  13.         {
  14.             printf("请输入第%d 个字符:",i+1);
  15.             //fgets(str[i],50,stdin);
  16.             //gets(str[i]);
  17.             scanf("%s",str[i]);
  18.             //printf("%s",str[i]);
  19.     //      //  scanf("%d",&m);
  20.         }
  21.     }
  22.     /*while (gets(str))
  23.     {
  24.         printf("%s\n",str);
  25.     }*/
  26. //    return 0;



  27.     return 0;
这个程序的奇葩输出:
3
请输入第1个字符:请输入第2个字符:1
请输入第3个字符:2
请输入第4个字符:34
请输入第5个字符:3
2
请输入第1个字符:请输入第2个字符:1
请输入第3个字符:2
请输入第4个字符:34
请输入第5个字符:5


gets 函数在没有while循环时好使,有while循环就不好使了,由于和while循环中scanf有关。
解析scanf:scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。。 gets函数从scanf执行后留下的回车作为第一个gets函数字符串参数。
scanf能完美解决

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<iostream>
  4. using namespace std;
  5. int main()
  6. {
  7.     int m = 0;
  8.     char str[5];
  9.     scanf("%d",&m);
  10. //    gets(str);
  11.     //scanf("%s",str);
  12.     cin >> str;
  13.     printf("%d\n",str[0]);
  14.     return 0;
  15. }
cin可以,scanf也可以,gets则处理同上

个人猜测是编译优化问题,还没有明确答案 
阅读(13105) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~