[英]reading an entire line including spaces using c
我正在嘗試從用戶讀取包括空格在內的整行,但是現在我的代碼僅在for循環的第一次迭代中才正確執行scanf。 之后,它僅打印x 9次,而不是再次詢問用戶更多的輸入。 好像在隨后的迭代中沒有調用scanf,為什么? 我怎樣才能解決這個問題? 我的代碼如下。 謝謝
#include <stdio.h>
#include <stdlib.h>
int main(){
char x[1024];
for (int n=0; n<10; n++){
scanf("%[^\n]s",x);
printf("x = %s\n",x);
}
scanf
系列存在許多問題,包括將項目留在緩沖區中,然后它將繼續重新讀取。 那就是你正在發生的事情。 如果您不需要使用它,請不要使用它。
使用fgets
讀取整行。 然后,如果要解析該行,請進一步使用sscanf
。
char line[BUFSIZ];
while( fgets(line, sizeof(line), stdin) != NULL ) {
...
}
scanf("%[^\\n]s",x)
讀取除\\n
以外的所有內容。 這意味着在第一次讀取后,它將把\\n
留在緩沖區中,這樣每次連續讀取都不會讀取任何內容(這就是x
保持原樣的原因)。
對於在線閱讀(即對\\n
進行正確處理),通常更適合使用fgets
。 而且,當您想要擺脫\\n
字符(它將成為fgets
讀取的字符串的一部分)時,可以使用strcspn
:
int main(){
char x[1024];
for (int n=0; n<10; n++){
if (!fgets(x,1024,stdin)) {
break;
}
x[strcspn(x,"\n")]='\0';
printf("x = %s\n",x);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.