[英]fscanf format with integers and characters
我必須讀取文件並獲取分數(分子,分母和數學符號)
這是輸入文件:
1 \\ 4 + 1 \\ 3
2 \\ 5-6 \\ 13
我的部分代碼:
int numer1[100], numer2[100], denom1[100], denom2[100];
char ope[100];
do{
checkScan = fscanf(fin, "%d %d %s %d %d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);
printf("%d %d %s %d %d\n", numer1[line], denom1[line], ope[line], numer2[line], denom2[line]);
if(checkScan==EOF){
printf("End of file\n");
break;
}
if(checkScan!=5){
printf("Not enough data or invalid data\n");
}
line++;
}while(1);
更換
checkScan = fscanf(fin, "%d %d %s %d %d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);
通過
checkScan = fscanf(fin, "%d\\%d %c %d\\%d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);
補充說明:
您還需要僅在checkScan==5
時執行printf,否則您不知道要打印什么
您還需要僅在輸入正常時才增加行數
您需要檢查行是否小於100
如果輸入字符串不遵循該模式,則將無限期循環。 我鼓勵您先閱讀該行然后對其進行解析。
總結一下我所有的話:
char readLine[100];
int numer1[100], numer2[100], denom1[100], denom2[100];
char ope[100];
while (fgets(readLine, sizeof(readLine), fin)) {
int checkScan = sscanf(readLine, "%d\\%d %c %d\\%d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);
if(checkScan!=5){
printf("Not enough data or invalid data\n");
}
else {
printf("%d %d %c %d %d\n", numer1[line], denom1[line], ope[line], numer2[line], denom2[line]);
if (++line == 100)
break;
}
}
注意:使用\\而不是/分數很奇怪
您的scanf格式無效。
ope是char類型,但是在scanf中,您需要一個ac字符串(char *)。
如果要讀取符號字符,則應將%c用作scanf的格式參數:
checkScan = fscanf(fin, "%d %d %c %d %d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.