首页 > 其他 > 详细

一个关于输入输出的问题

时间:2016-07-12 02:05:54      阅读:260      评论:0      收藏:0      [点我收藏+]

点击(此处)折叠或打开

  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则处理同上

个人猜测是编译优化问题,还没有明确答案 

一个关于输入输出的问题

原文:http://blog.chinaunix.net/uid-31140357-id-5747537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!