关于PTA中使用scanf()忽略返回值导致报错
张宸 Lv1

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* PTA 7-7 计算摄氏温度 */
#include <stdio.h>

int main()
{

int fahrenheit,celsius;

scanf("%d", &fahrenheit);

celsius = 5 * (fahrenheit - 32)/9;

printf("Celsius = %d", celsius);

return 0;
}

报错如下:

image-20200603023836964

原因是scanf()是有返回值的,编写的代码把返回值丢弃不用,这样就会导致运行时如果输入的格式不对就可能出问题,特别是在循环中。

解决方案:

1.强制将返回值转换为viod(空)

1
(void)scanf("%d",&null);

2.通过if来避免警告

1
if(scanf("%d",&null)){};

PTA的编译器过于严格,在其他的一些旧的编译器上可能不会出现上述情况,但scanf()在通常情况下,不应忽略返回值,因此编译器返回了一个warning。

一般来讲,PTA中如果程序能通过,warning可以不用理会,但在生产环境中需特别注意。


参考网站

  1. 有关scanf的一句警告-CSDN论坛
  2. Warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result | 易学教程