scanf返回值在for循环中的问题

[复制链接]
查看11 | 回复8 | 2021-1-27 06:45:35 | 显示全部楼层 |阅读模式
#include
#include
intmain(void){
boolisInt=false;
intn=0;
for(printf("Inputappropriatenumber.\n");(isInt==false)||n -->
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
按for循环的步骤一步一步走,
实在没必要写成这样跟自己过不去啊,
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
输入一个字母后,scanf("%d")不会消费掉这个字符,下次执行scanf仍会读取该字符
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
scanf返回值为正确按指定格式输入变量的个数,也即能正确接收到值的变量个数,读到文件末尾出错时则返回EOF
不是你需要的意思
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用2楼iyomumx的回复:输入一个字母后,scanf("%d")不会消费掉这个字符,下次执行scanf仍会读取该字符
那如果输入了非整型怎么再次输入呢?


回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用4楼Wizard_xxx的回复:Quote: 引用2楼iyomumx的回复:输入一个字母后,scanf("%d")不会消费掉这个字符,下次执行scanf仍会读取该字符
那如果输入了非整型怎么再次输入呢?


这样呢:

for(printf("Inputappropriatenumber.\n");(isInt==false)||n
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用5楼paschen的回复:Quote: 引用4楼Wizard_xxx的回复:
Quote: 引用2楼iyomumx的回复:输入一个字母后,scanf("%d")不会消费掉这个字符,下次执行scanf仍会读取该字符
那如果输入了非整型怎么再次输入呢?


这样呢:

for(printf("Inputappropriatenumber.\n");(isInt==false)||n

++
LZ的for循环可读性太差了。从没见过人这样写的。
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
这是我见过最操蛋的代码,没有之一
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
不要使用
while(条件)
更不要使用
while(组合条件)
要使用
while(1){
if(条件1)break;
//...
if(条件2)continue;
//...
if(条件3)return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while(!feof(f)){
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
while(1){
a=fgetc(f);
if(feof(f))break;
//...
b=fgetc(f);
if(feof(f))break;
//...
}
类似的例子还可以举很多。
对for语句类似。

for(A;B;C)D;
//等价于
{
A;
while(1){
if(!(B))break;
D;
C;
}
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行