scanf 在 C 中被跳过
scanf is being skipped in C
我尝试运行以下程序:
int main(){
char a;
char b;
char c;
printf("\nenter a: ");
scanf("%c", &a);
printf("\nenter b: ");
scanf("%c", &b);
printf("\nenter c: ");
scanf("%c", &c);
return 0;
}
在 运行 启动程序时,它会提示您输入 a 的值。完成后,系统会提示您输入 b 的值,但是不允许您输入值,因为程序会跳过扫描,然后再次提示您输入未跳过的 c 值。我可以初始化 a 和 c,但不能初始化 b。我不知道为什么。我在某处读到在 scanf 中使用 %[^\n],但我尝试使用它但我认为我没有正确使用它,因为它仍然无法正常工作。
这是输出(带有一些输入示例):
enter a: 1
enter b:
enter c: 1
process returned 0 (0x0)
而不是 "%c"
,使用 " %c"
。
如果没有 space,当格式说明符为 %c
时,scanf 不会跳过白色的 spaces。这最初令人困惑,因为它会跳过其他格式说明符的白色 space,例如 %d
、%f
、%s
等
当您按 enter 时,会向输入队列添加一个字符,然后将其读入 b
。
您可以显式读取一个字符以忽略它,或者您可以使用(作为一种选择)%1s
读取单字符字符串(这将跳过 white-space,包括按 enter.
时输入的换行符
按 enter
后,'\n'
成为变量 b
的输入。
所以要解决这个问题,请使用 getchar()
来处理 '\n'
.
int main(){
char a;
char b;
char c;
printf("\nenter a: ");
scanf("%c", &a);
getchar();
printf("\nenter b: ");
scanf("%c", &b);
getchar();
printf("\nenter c: ");
scanf("%c", &c);
return 0;
}
我尝试运行以下程序:
int main(){
char a;
char b;
char c;
printf("\nenter a: ");
scanf("%c", &a);
printf("\nenter b: ");
scanf("%c", &b);
printf("\nenter c: ");
scanf("%c", &c);
return 0;
}
在 运行 启动程序时,它会提示您输入 a 的值。完成后,系统会提示您输入 b 的值,但是不允许您输入值,因为程序会跳过扫描,然后再次提示您输入未跳过的 c 值。我可以初始化 a 和 c,但不能初始化 b。我不知道为什么。我在某处读到在 scanf 中使用 %[^\n],但我尝试使用它但我认为我没有正确使用它,因为它仍然无法正常工作。
这是输出(带有一些输入示例):
enter a: 1
enter b:
enter c: 1
process returned 0 (0x0)
而不是 "%c"
,使用 " %c"
。
如果没有 space,当格式说明符为 %c
时,scanf 不会跳过白色的 spaces。这最初令人困惑,因为它会跳过其他格式说明符的白色 space,例如 %d
、%f
、%s
等
当您按 enter 时,会向输入队列添加一个字符,然后将其读入 b
。
您可以显式读取一个字符以忽略它,或者您可以使用(作为一种选择)%1s
读取单字符字符串(这将跳过 white-space,包括按 enter.
enter
后,'\n'
成为变量 b
的输入。
所以要解决这个问题,请使用 getchar()
来处理 '\n'
.
int main(){
char a;
char b;
char c;
printf("\nenter a: ");
scanf("%c", &a);
getchar();
printf("\nenter b: ");
scanf("%c", &b);
getchar();
printf("\nenter c: ");
scanf("%c", &c);
return 0;
}