ubuntu return 值 'fscanf' 中的警告

warning in ubuntu in return value of 'fscanf'

http://festvox.org/安装节日语音合成系统...直接通过运行通用脚本。 面对下面给定的问题.....这个问题是否会影响我在节日框架上的工作?????

eps.c: In function ‘getd’:

eps.c:142:7: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result [-Wunused-result]

   fscanf(fp, "%d %d", x, y);
   ^

阅读 fscanf(3) 的文档。您应该使用返回的成功扫描项目的计数,例如代码类似于:

int x = 0, y = 0;
if (fscanf(fp, "%d %d", &x, &y) < 2) {
   fprintf(stderr, "missing numbers at offset %ld\n", ftell(fp));
   exit(EXIT_FAILURE);
}

这样您就可以改进 eps.c 文件(也许可以提交补丁 and/or 上游错误报告)。

此警告表示不检查 scanf 的 return 值并不是一个好主意。

我认为转换为 (void) 是避免这种情况的一种方法,但显然它不是这里讨论的那样:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509

但是你得到的不是错误,只是警告(你的标题有点误导)

如果不使用该值,则显然不是问题。

手册页说:

The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs. EOF is also returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set to indicate the error.

这意味着您可以检查 EOF:

#include<stdio.h>

int main(void){
    int a;
    printf("Please give the value of A: ");

    if(scanf("%d",&a) != EOF){
        printf("\nThe value of A is\t%d\n",a);
    }

    return 0;
}

或者:

#include<stdio.h>
#include <errno.h>
#include<string.h>

int main(void){
    int a, errnum = errno;
    printf("Please give the value of A: ");

    if(scanf("%d",&a) == EOF){
        fprintf(stderr, "Value of errno: %d\n", errno);
        perror("Error printed by perror");
        fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
    }

    printf("\nThe value of A is\t%d\n",a);
    return 0;
}

这适用于:

scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - input format con‐ version