-
#include<stdio.h>
-
#include<stdlib.h>
-
int main()
-
{
-
int i = 0;
-
int m = 0;
-
//char str[100];
-
-
while (scanf("%d",&m))
-
{
-
char str[10][10];
-
for (i = 0;i < 5;i++)
-
{
-
printf("请输入第%d 个字符:",i+1);
-
//fgets(str[i],50,stdin);
-
//gets(str[i]);
-
scanf("%s",str[i]);
-
//printf("%s",str[i]);
-
// // scanf("%d",&m);
-
}
-
}
-
/*while (gets(str))
-
{
-
printf("%s\n",str);
-
}*/
-
// return 0;
-
-
-
-
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能完美解决
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<iostream>
-
using namespace std;
-
int main()
-
{
-
int m = 0;
-
char str[5];
-
scanf("%d",&m);
-
// gets(str);
-
//scanf("%s",str);
-
cin >> str;
-
printf("%d\n",str[0]);
-
return 0;
-
}
cin可以,scanf也可以,gets则处理同上
个人猜测是编译优化问题,还没有明确答案
阅读(1273) | 评论(0) | 转发(0) |