c++ - 使用属性 warn_unused_result [-Wunused-result] 声明的警告 : ignoring return value of 'int scanf(const char*, ...)' ,

标签 c++ c time compilation scanf

我正在解决一个问题。问题是这样的:吉尔和荣格喜欢幸运数字。幸运数字显然是4和7,如果正数的十进制表示包含4和7,则该正整数被认为是幸运的。例如 4444747 是幸运的,而 477389 则不幸运。

Jill 希望通过丢弃整数中的非幸运数字来将非幸运整数转换为幸运整数。例如,数字 767456 的答案是 774 ,数字 9974 的答案是 741775667 的答案是 777

Jill 会给你两个数字 a 和一个幸运数字 b 。找到一个包含幸运整数“b”的最小正整数 c ( c > a )。

输入格式:

整数t:测试用例的数量。遵循两个整数 ab ( 1 <= a ,  b <= 100000 )。 b 始终是一个幸运整数。

输出格式:

打印包含幸运数字c的最小数字b

示例输入

1
47 74

示例输出

74

我只是 C 的初学者。我编写了以下代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int r1, r2, c1, c2, d1, d2, a, b, c, d, n, x, i, flag = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%d%d%d%d%d%d", &r1, &r2, &c1, &c2, &d1, &d2);
        for (a = 0; a < 25; a++)
            for (b = 0; b < 25; b++)
                for (c = 0; c < 25; c++)
                    for (d = 0; d < 25; d++) {
                        if ((a + b == r1) && (c + d == r2) &&
                            (a + c == c1) && (b + d == c2) &&
                            (a + d == d1) && (c + b == d2) &&
                            a > 0 && b > 0 && c > 0 && d > 0) {
                            printf("YES\n");
                            break;        
                        } else
                            flag = 1;
                    }
        if (flag == 1)
            printf("NO\n");
    }
    return 0;   
}

我收到以下错误。请帮助我。

solution.cc: In function 'int main()':
solution.cc:10:19: warning: ignoring return value of 'int scanf(const char*, ...)', 
                   declared with attribute warn_unused_result [-Wunused-result]
               scanf("%d",&n);
               ^
solution.cc:13:25: warning: ignoring return value of 'int scanf(const char*, ...)',
                   declared with attribute warn_unused_result [-Wunused-result]
               scanf("%d%d",&a,&b);
               ^

最佳答案

如果您在 scanf 期望输入数字时没有输入数字,则返回的成功转换次数将少于您的预期。忽略此返回值并不是语法错误,但它非常草率,因为如果输入的数字不足,您的程序将以未定义的方式运行。

这样修复代码:

if (scanf("%d", &n) != 1) {
    printf("expected number\n");
    return 1;
}

for (i = 0; i < n; i++) {
    if (scanf("%d%d%d%d%d%d", &r1, &r2, &c1, &c2, &d1, &d2) != 6) {
        printf("missing numbers\n");
        return 1;
    }
    ...

此外,其余代码似乎与幸运数字问题没有任何联系。

关于c++ - 使用属性 warn_unused_result [-Wunused-result] 声明的警告 : ignoring return value of 'int scanf(const char*, ...)' ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394799/

相关文章:

c - 如何将计算有界切片数量的时间复杂度降低到 O(N)?

c++ - 有谁知道类似于 .Net 的 XML 文档的 C++ XML 解析器/编写器?

c++ - 当我尝试使用指针打印数组元素时打印垃圾值

c - 释放 C 中为 char* 分配的内存

c - array undeclared , first used in the function error during dynamic memory allocation 数组未声明,首次用于动态内存分配期间的函数错误

mysql - 如何根据耗时(带有时间字段)进行选择

c++ - 初始化模板化、递归、POD 结构

c++ - 我们能把这样的结构变成类型化的类/函数吗?

c - Vim quickfix 模式与 Oracle Pro*C 文件?

r - 使用 HR :MIN in R 查找时间平均值