【发布时间】:2017-03-26 13:13:02
【问题描述】:
在下面代码的循环中,scanf("%[^\n]s",array) 不起作用。它不等待输入并被跳过。但是% 之前的空格可以解决问题。为什么?
这是错误的程序:
#include <string.h>
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--){
char arr[199];
scanf("%[^\n]s",arr);
printf("%s",arr);
}
return 0;
}
这是正确的代码:
#include <string.h>
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--){
char arr[199];
scanf(" %[^\n]s",arr);
printf("%s",arr);
}
return 0;
}
为什么% 之前需要一个空格才能按预期工作?
【问题讨论】:
-
这是因为您有一个需要跳过的换行符。第一个 scanf 只是读取数字,您仍然在输入中留下换行符。如果没有空间来吸收剩余的换行符,循环中的 scanfs 也不会读取换行符。实际上你可以在循环中使用 scanf("%s", arr) 。