Juniorboy 发表于 2020-4-20 18:35:55

课后作业

#include <stdio.h>

int main()
{
      int ch;

      while (scanf("%d", &ch) == 1 && ch >= 0)
                ;

      return 0;
}

课后作业说这个只要输入的不是自然数就可以退出,但是如果我输入2的话2也不==1啊,不是也可以退出吗,为什么啊,没看懂,求解。谢谢

zltzlt 发表于 2020-4-20 18:39:03

scanf("%d", &ch) == 1 是判断是否输入成功,不是用户输入的是否为 1

Juniorboy 发表于 2020-4-20 18:40:49

zltzlt 发表于 2020-4-20 18:39
scanf("%d", &ch) == 1 是判断是否输入成功,不是用户输入的是否为 1

啊啊明白了,请问那我要是输入字符的话,是因为scanf哪里出错程序出错还是退出循环啊

qiuyouzhi 发表于 2020-4-20 18:43:33

Juniorboy 发表于 2020-4-20 18:40
啊啊明白了,请问那我要是输入字符的话,是因为scanf哪里出错程序出错还是退出循环啊

怎么会出错呢?
楼上都说过了,那个只是判断输入是否成功

4goodworld 发表于 2020-4-20 21:30:01

Juniorboy 发表于 2020-4-20 18:40
啊啊明白了,请问那我要是输入字符的话,是因为scanf哪里出错程序出错还是退出循环啊

对于scanf而言,你只有两种可能,一是“输入”(1),二是“没输入”(0)

sunrise085 发表于 2020-4-20 21:44:07

scanf("%d", &ch)这个语句是用scanf读入一个int类型赋值给ch,scanf制度如一个int数据其以返回值可能是1或者0或者-1,若读到int类型数据则返回值为1;若读到其他字符,则返回值为0;什么也没有读到,则返回值为-1

若你输入的一直是整型数(可以有空白符(空格、Tab、回车))那么scanf的返回值将一直是1,若输入一个其他内容,比如输入一个浮点数(例如:1.23)那么会读到1,条件判断为真,然后下次循环读到一个点(.),scanf返回值为0,结束循环。
页: [1]
查看完整版本: 课后作业