它在我的 While 回圈中的 fscanf 處出現段錯誤。表示該檔案不存在,但顯然存在,其中包含資料,并且與 .c 檔案位于同一位置。任何幫助是極大的贊賞!
#include <stdio.h>
#include <stdlib.h>
#define IN_FILE_NAME "lab4.dat"
#define OUT_FILE_NAME "lab4.txt"
int main(void)
{
double h, s1, s2, area;
FILE * infile;
FILE * outfile;
infile = fopen("lab4.dat" , "r");
if (infile = NULL){
printf("Error on fopen input file\n");
exit (EXIT_FAILURE);
}
outfile = fopen("lab4.txt", "w");
if (outfile = NULL){
printf("Error on fopen output file\n");
exit (EXIT_FAILURE);
}
while ((fscanf(infile, "%lf%lf%lf", &h, &s1, &s2)) == 3)
{
area = 0.5 * h * (s1 s2);
fprintf(outfile, "%7.2f %7.2f %7.2f .3f", h, s1, s2, area);
}
fprintf(outfile, "\nTyler Rice. Lab 4. \n\n");
fprintf(outfile, "Area of Trapezoid \n\n");
fprintf(outfile, " Height Side1 Side2 Area \n");
fprintf(outfile, "-------- --------- --------- ---------- \n");
fprintf(outfile, "\n\n");
fclose(infile);
fclose(outfile);
return EXIT_SUCCESS;
/*---------------------------------------------------*/
}
uj5u.com熱心網友回復:
在您的if情況下,您正在使用賦值運算子=來檢查相等性。這是錯誤的。您應該使用==運算子來比較值。
當您到達 時fscanf,您infile已經為 NULL。
uj5u.com熱心網友回復:
正如@babon 所發布的,這里的答案是使用賦值 ( =) 而不是等式測驗 ( ==)。
問題是if在 C中的賦值是完全合法的代碼,所以它編譯沒有問題。評論中推薦的一種解決方案是在編譯時打開警告。這是至關重要的。錯誤會阻止您的代碼編譯,但警告提示正在等待發生的運行時錯誤。
除了注意警告之外,您還可以顛倒條件中的條款。
這編譯:
if (infile = NULL) {
}
這并不會編譯:
if (NULL = infile) {
}
但這確實:
if (NULL == infile) {
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331916.html
