第一scanf函数只是更改为:
scanf("%d\n",&a);
否则第二scanf函数只是看到了\ n和读数为0的项目(因此离开你的味精不变
随着你的原代码,以及一些新增的诊断:
#include <stdio.h>
#include <string.h>
int main() {
int a;
int itemsScanned;
char msg[10]; strcpy (msg, "unchanged");
itemsScanned=scanf("%d",&a);
printf("itemsScanned=%d a=%d\n",itemsScanned, a);
itemsScanned=scanf("%[^\n]s",msg);
printf("itemsScanned=%d msg=%s\n",itemsScanned, msg);
return 0;
}
(当输入3 < \ NL)的输出是:
> ./a.out
3
itemsScanned=1 a=3
itemsScanned=0 msg=unchanged
在第一scanf的附加\ n和进入5 \ nlHugo \ NL:
./a.out
5
Hugo
itemsScanned=1 a=5
itemsScanned=1 msg=Hugo
'%[^ \ n]'本身就是一个“事物”,你不需要在它后面使用's'。顺便说一句,这可能被认为是字面意思,这会影响你的扫描。 – Spidey