【发布时间】:2017-07-20 05:07:43
【问题描述】:
给定以下代码:
#include <stdio.h>
int main()
{
int testcase;
char arr[30];
int f,F,m;
scanf("%d",&testcase);
while(testcase--)
{
printf("Enter the string\n");
fgets(arr,20,stdin);
printf("Enter a character\n");
F=getchar();
while((f=getchar())!=EOF && f!='\n')
;
putchar(F);
printf("\n");
printf("Enter a number\n");
scanf("%d",&m);
}
return 0;
}
我希望用户输入一个字符串、一个字符和一个数字,直到测试用例变为零。
我的疑惑/问题:
1.用户无法输入字符串。似乎fgets 不起作用。为什么?
2.如果我使用scanf 而不是fgets,则getchar 无法正常工作,即我在其中输入的任何字符都只是putchar 作为新行。为什么?
感谢您的帮助。
【问题讨论】:
-
scanf("%d",&testcase);-->scanf("%d%*c", &testcase);跳过数字后的换行符。 -
fgets从 FILE 中读取,直到遇到新行。但是您对scanf的第一次使用是在输入流中留下'\n' 字符,然后fgets使用它并认为输入已完成。 -
为什么我们需要跳过数字后的新行?
-
在
fgets收到换行符。 -
最好不要将
scanf()与fgets()混用以避免这些麻烦;尝试将fgets()与sscanf()一起使用,而不是单独使用scanf()。
标签: c