在下面的代码循环中,scanf("%[^\n]s",array)
不起作用。它不会等待输入并跳过。但%
之前的空间解决了这个问题。为什么?%scanf中的[^ n] s不会等待输入并被跳过
下面是错误的程序:
#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)。 – Shiping
你可能想检查一下:https://stackoverflow.com/questions/45038176/not-able-to-input-a-string-with-spaces-in-a-loop-in-c/45038767?noredirect= 1#comment77052162_45038767我最近回答 –