我最近在我的电脑上运行了ac程序.它有一个for循环,其中扫描了一些char.for循环运行3次.在每次运行期间,它打印运行计数,然后扫描char d的值.该计划如下
#include<stdio.h>
int main(){
int f;
char d;
for(f=0;f<3;f++){
printf("Choice %d\n", f);
scanf("%c", &d);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在麻烦的是,当我运行程序时,当f为1时,跳过scanf部分.现在,如果我更改代码如下
#include<stdio.h>
int main(){
int f;
int d;
for(f=0;f<3;f++){
printf("Choice %d\n", f);
scanf("%d", &d);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在程序运行正常.并且forf循环的每次迭代都执行scanf.
这里的问题似乎是什么?我的意思是当d是int类型时它工作正常,但是当d是char类型时它不能正常工作.
Sou*_*osh 11
你必须改变
scanf("%c", &d);
Run Code Online (Sandbox Code Playgroud)
至
scanf(" %c", &d);
^
|
Run Code Online (Sandbox Code Playgroud)
否则,scanf()将考虑先前输入的ENTER按键.
注意:
ENTER按键生成a \n,这是%c格式说明符的vaild输入.在%c告诉之前添加空格scanf()以忽略所有前导空格类型的输入(包括先前存储的\n)并从中读取第一个非空白字符stdin.
对于%d格式说明符的情况,它在扫描数字输入之前消耗(并忽略)任何前导的类空格输入,因此第二种情况不会遇到任何问题.
| 归档时间: |
|
| 查看次数: |
9786 次 |
| 最近记录: |