在下面的代碼循環中,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我最近回答 –