程员新秀 发表于 2022-1-19 00:59:34

C语言 中 判断是否为数字问题

本帖最后由 程员新秀 于 2022-1-19 01:01 编辑

原代码
#include <stdio.h>

int main()
{
      int num = 0;
      long sum = 0L; // 0L表示类型为long的0
      int status;

      do
      {
                printf("请输入合法的数字:");
                sum = sum + num;
                status = scanf("%d", &num);
      } while(status == 1);

      printf("结果是:%ld\n", sum);

      return 0;
}


中status = scanf("%d", &num);
      } while(status == 1);
为什么status可以判断出num是否为数字?status = scanf是如何判断的?

小白,求大佬解答!


程员新秀 发表于 2022-1-19 01:05:08

当num输入为数字时候,status取值是怎样的,当num输入为字符时候,status取值又是怎样的?status == 1也麻烦解释一下吧

人造人 发表于 2022-1-19 02:32:22

程员新秀 发表于 2022-1-19 01:05
当num输入为数字时候,status取值是怎样的,当num输入为字符时候,status取值又是怎样的?status == 1也麻 ...

你写个程序试一下不就知道了

#include <stdio.h>

int main(void) {
    int num;
    int status = scanf("%d", &num);
    printf("num: %d\n", num);
    printf("status: %d\n", status);
    return 0;
}


$ ./main
1
num: 1
status: 1
$ ./main
a
num: -713396680
status: 0
$ ./main
123
num: 123
status: 1
$ ./main
abc
num: -815911320
status: 0
$


#include <stdio.h>

int main(void) {
    int x, y;
    int status = scanf("%d%d", &x, &y);
    printf("x: %d\n", x);
    printf("y: %d\n", y);
    printf("status: %d\n", status);
    return 0;
}


$ ./main
12 34
x: 12
y: 34
status: 2
$ ./main
56 z
x: 56
y: 1055045080
status: 1
$ ./main
z 78
x: 1
y: -1031639160
status: 0
$

大马强 发表于 2022-1-19 08:31:41

程员新秀 发表于 2022-1-19 01:05
当num输入为数字时候,status取值是怎样的,当num输入为字符时候,status取值又是怎样的?status == 1也麻 ...

scanf的返回值使它按照格式符成功读入数据的个数
该代码中只有一个%d, 所以要是输入整型,它返回的是1,否则0
页: [1]
查看完整版本: C语言 中 判断是否为数字问题