我正在尝试编写一个C程序,它将n
作为整数输入,然后输入n
个字符串。当我运行程序时,它需要一个小于n
的输入。如果我输入1
作为第一个输入,程序就会终止。这是代码:
int n;
scanf("%d", &n);
char str[101];
while (n--) {
fgets(str, 101, stdin);
// other stuff...
}
我在这里做错了什么?
答案 0 :(得分:3)
如果您使用scanf()
作为和字符串输入,您的程序将会正常工作。
#include <stdio.h>
int main()
{
int n;
char str[101];
scanf("%d", &n);
while (n--)
{
scanf("%s", str);
}
return 0;
}
但是对于所有输入使用fgets()
可能更好。
#include <stdio.h>
int main()
{
int n;
char str[101];
fgets(str, 100, stdin);
sscanf(str, "%d", &n);
while (n--)
{
fgets(str, 100, stdin);
}
return 0;
}
因为您首先使用fgets()
,所以我几乎不需要提醒您,您应该知道它会在输入字符串的末尾保留newline
。
答案 1 :(得分:1)
请记住,按Enter键也会向流发送一个字符。您的程序无法解释此问题。使用格式scanf(%d%*c)
丢弃第二个字符。
int main(void) {
int n;
scanf("%d%*c", &n);
char str[101];
while (n--)
{
fgets(str, 101, stdin);
// other stuff.....
}
}
答案 2 :(得分:1)
int n;
scanf("%d", &n);
char str[101];
while (n--)
{
fgets(str, 101, stdin);
// other stuff...
}
当您输入n
并从键盘ENTER
按'\n
时,stdin
存储在fgets
中,因此newline character
遇到scanf
如果返回
因此请在 char c ;
while((c=getchar())!=NULL && c!='\n');
-
enum