【求助】TURBO C讀檔的問題



贊助商連結


金田一
2003-03-23, 11:37 AM
:confused: 請問各位高手:我想要把筆記本的數字讀到turbo上.筆記本的資料是:36.25, 27.3, -35.2, 0 ,27, -3.14, 24.87, 9.14, 5.82, 154.8, E讀到E停上並算出共有若干組數字, 以下是我打的程式:
#include<stdio.h>
#include<stdlib.h>
{
int n,number=0;
char *ch1,ch2;
FILE *fp1;
FILE *fp2;
fp1=fopen("hw1.txt","r");
fp2=fopen("ans1.txt","w");
{
for (n=-1;n<number;n++)
ch1=fgetc(fp1)
while(ch1!='E')
number=number+1;
}
fprint(fp2,"%d\n",number);
fclose(fp1);
fclose(fp2);
}
執行後,營幕上沒有出現任何數字.請問各位高手這程式有什麼問題嗎?為什麼沒有出現任何數字.

贊助商連結


gwochern
2003-03-23, 04:59 PM
{
for (n=-1;n<number;n++) <--number一開始為0
ch1=fgetc(fp1) <--這行是不是少打了一個分號,for做了一次,就離開,所以ch1的內容是3
while(ch1!='E') ch1='3' != 'E'
number=number+1; 會一直做number=number+1,永不會離開這個LOOP,所以當然沒有任何值輸出
}

金田一
2003-03-26, 10:33 PM
請問下面的程式有何錯誤:我要做的是將檔案讀進來後到E結束時,將正的數總加起來
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
int n,number=0,sum=0;
char *ch1,ch2,ch3;
FILE *fp1;
FILE *fp2;
fp1=fopen("hw1.txt","r");
fp2=fopen("ans1.txt',"w");
for (n=-1;n<number;n++)
{
fscanf(fp1,"%f\n",&ch2);
ch1=atof(ch2);
if (ch1>0)
sum=sum+ch1;
{
ch3=fgetc(fp1);
if (ch3!='E')
number=number+1;
else
number=number+0;
}
}
fprintf(fp2,"number=%d",number);
fprintf(fp2,"sum=%f",sum);
}

gwochern
2003-03-27, 12:58 AM
ch2為char
fscanf(fp1,"%f\n",&ch2);這行會使你的數值亂掉,應設浮點數
再下去,你的程式就亂掉了

你會不會用TURBO C的debug工具,用這看很快的
按Ctrl+F7輸入你要看的參數
按F7或F8單步執行,F7F8有何不同自己去了解
若看不到參數的地方按F6,轉換
若執行到一半,不想執行,再下來按Ctrl+F2,來停止
試試吧


你這程式建議用while loop做判,可在這loop計算加了幾個數,只是你要將數值讀出來可能
要費點功夫了,可以每次每個字元讀出來,放在char 的buffer中,當遇到 "," 時在將buffer用
atof轉換,在加起來

while((ch=fgetc(fp))!='E')
{
......
}

金田一
2003-03-28, 08:48 PM
下列程式可以執行,但答案不對.可以告訴我如何改嗎?,改哪裡嗎??謝謝....
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
float ch1,sum=0;
char n,number=0;
char ch2,ch3;
FILE *fp1;
FILE *fp2;
fp1=fopen("hw1.txt","r");
fp2=fopen("ans1.txt","w");
for (n=-1;n<number;n++)
{
fscanf(fp1,"%s\n",&ch2);
ch1=atof(&ch2);
{
if(ch1>0)
{
sum=sum+ch1;
}
if ((ch3=fgetc(fp1)!='E')
number=number+1;
}
}
fprintf(fp2,"number=%d",number);
fprintf(fp2,"sum=%f",sum);
fclose(fp1);
fclose(fp2);
}
執行結果:number=1sum=78.750000
但真正結果:number=10sum=285.180000

gwochern
2003-03-29, 12:52 AM
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
float ch1,sum=0;
char n,number=0;
char ch2,ch3;
FILE *fp1;
FILE *fp2;
fp1=fopen("hw1.txt","r");
fp2=fopen("ans1.txt","w");
for (n=-1;n<number;n++)
{
fscanf(fp1,"%s\n",&ch2);

printf("ch2:%s\n",ch2); //你在這加個行指令,看看你ch2得到是什麼,
//還有ch2是一個字元,但你的數字是字串,所以這樣不行

ch1=atof(&ch2);//&這符號不要亂用
{
if(ch1>0) //如果照你的寫法,你的檔案不是有負數嗎,這個判斷可能有問題
{
sum=sum+ch1;
}
if ((ch3=fgetc(fp1)!='E')
number=number+1;
}
}
fprintf(fp2,"number=%d",number);
fprintf(fp2,"sum=%f",sum);
fclose(fp1);
fclose(fp2);
}

這程式真的很亂,建議重寫,不要在用這架構,用while loop 寫
還有你要先知道,什麼是字串,字元,數值,和檔案指標的跑法
和fgetc(),fgets(),fputc(),fputs(),fprintf(),fscanf()這幾個函數的用法
在加上debug工具,寫程式一定要會用debug工具,否則在厲害的人也寫不出大程式

Wild-Half
2003-03-29, 01:37 AM
看起來頗像老師所給的作業...是我多疑了吧><
呃...寫程式比較建議要適時的空格以區別,到時候修改比較方便(看得順眼)
BTW,TC的DEBUG功能其實真的已經很完備了~不過前題是你要看得懂它在警告你那裡寫錯...

寫程式不怕有錯,怕的是寫完之後一切無誤,卻出不來結果的LOGIC錯誤..><