我有一些問題與此代碼退出一個do while循環!使用C中的scanf = EOF使得3次額外的迭代
我想通讀標準輸入一個txt文件,特別是我遵循編譯步驟分別是:
g++ eda.c -o eda.exe
./eda.exe < eda.txt
而且.txt文件的內容是:
3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
print v3
incr v3 v1
第4行有沒有興趣,現在,這些線路都與函數getline指令被已經被讀取。所以,問題從第五行開始,「增量...」
隨着那行,我期望的輸出,如:print!
但我得到:
print! print! print!
(與incr
相同)
讀取incr
和print
開始與代碼的特定部分: char mystring [20];
ñ OTE: 使用fgets()解決!
這是最後的代碼:
do {
//sscanf (mystring,"%s",str);
//int res = strncmp(str, "incr", 10);
if(mystring[0] == 'p') casenumber = 1;
else if(mystring[0] == 'i') casenumber = 2;
else if(mystring[0] == 'd' && mystring[1] == 'o') casenumber = 3;
else if(mystring[0] == 'd' && mystring[1] == 'i') casenumber = 4;
else if(mystring[0] == 'd' && mystring[1] == 'e') casenumber = 5;
switch(casenumber)
{
case 1 :
printf("print!\n");
break;
case 2 :
printf("increase!\n");
break;
case 3 :
printf("dot!\n");
break;
case 4 :
printf("distance!\n");
break;
case 5 :
printf("decr!\n");
break;
default :
printf("casenumber value is: %d\n", casenumber);
break;
}
casenumber = 0;
} while (fgets (mystring , 21 , stdin) != NULL);
回顧代碼上SO是痛苦的結果。 – haccks
你的do-while應該是'while(scanf(「%19s」,mystring)== 1){...}'你在得到它後馬上忽略結果,然後把'mystring []'它實際上工作。說實話,你應該通過'fgets()'來處理這個問題' – WhozCraig
爲什麼你發佈所有與這個問題無關的代碼?請嘗試將其降低爲顯示問題的最小示例。 –