我正在完成需要从输入文件中读取的家庭作业。然而,程序只是出错而且我无法说明原因。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
int main()
{
FILE *fp = fopen( "input.txt", "r");
FILE *outputF = fopen( "output.txt", "w");
if( !fp || !outputF){
fprintf(stderr, "can't open files for input/output");
exit(EXIT_FAILURE);
}
char line[250];
double factor;
int expo;
while( fscanf( fp, "%f%d", factor, expo) == 1){
if( factor == 0){
fprintf(outputF, "%s\n", "undefined");
}
else{
double total = 1;
for(int i = 0; i < expo; i++){
total = total * factor;
}
fprintf(outputF, "%f", total);
}
}
fclose(fp);
fclose(outputF);
return EXIT_SUCCESS;
}
我认为问题出在&#34;而#34;但我也尝试使用以下代码,它不起作用。输入文件有一个doulbe和一个由空格分隔的int。即&#34; 2.33 3&#34;
while(fscanf(fp, "%s", line) == 1){
char *token;
token = strtok(line, " ");
float factor;
sscanf(token, "%f", &factor);
token = strtok(NULL, "\n");
int expo;
sscanf(token, "%d", &expo);
答案 0 :(得分:0)
第一个问题while (fscanf( fp, "%f%d", factor, expo) == 1)
必须是
while (fscanf(fp, "%f%d", &factor, &expo) == 2)
阅读fscanf()
手册。它不返回真值,它返回字符串中匹配的说明符的数量。
第二个问题,未定义的行为由于scanf()
格式说明符不正确,double
需要"%lf"
而不是"%f"
第三个问题,您必须传递要阅读的值的地址,以允许scanf()
将结果存储在那些变量中,&
正在做什么在上面的固定fscanf()
。
注意:您的编译器应该警告这些错误中的两个错误的格式说明符,并且不对这些特定的说明符使用运算符的&
地址。有两个选项,您忽略这些警告,或者您正在编译并关闭警告。这些可能的原因中的第一个非常糟糕,不要忽视警告。第二,阅读编译器的文档,并尽可能多地进行诊断,以避免愚蠢的错误。