直接通过运行通用脚本从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);
^
答案 0 :(得分:3)
阅读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
文件(并可能在上游提交补丁和/或错误报告)。
答案 1 :(得分:0)
这个警告说不检查scanf的返回值不是一个好主意。
我认为转向{{1}}是一种避免这种情况的方法,但显然不是这里所讨论的:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509
然而,这不是一个错误,只是一个警告(你的标题有点误导)
如果未使用该值,则显然不是问题。
答案 2 :(得分:0)
手册页说:
如果之前达到输入结束,则返回值EOF 要么是第一次成功转换,要么是匹配失败。 如果发生读取错误,也会返回EOF,在这种情况下会出现错误 设置流的指示符(请参阅ferror(3)),并将errno设置为 表明错误。
这意味着您可以查看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 - 输入格式con 版本