我意外地在一個for循環中隱藏了一個額外的printf語句來運行昂貴的模擬,創建了大量〜10 GB的文件而不是〜10 KB的文件。C:對字符數組進行索引並使用strcmp
重新運行仿真是不是最好的選擇,所以我已經決定採取裂縫在解決了這個問題,即使我沒有任何正式的培訓與C.
我試圖修復(x,y,t,n是int,int,long double,long double)的行,只打印出格式爲(x,y,t,n) 。其他行是基本上描述某些參數的字符串,數字和空格的組合,但所有(數百萬)不需要的行以字母「i」開頭。
所以我想我會嘗試遵循這個代碼在這裏的例子:Skip a line while reading a file in C
int main(int argc, char *argv[])
{
FILE *f;
if((f = fopen(argv[1], "r")) == NULL)
{
printf("Couldn't open file. \n");
return(0);
}
char buf[500];
while(fgets(buf, sizeof(buf), f) != NULL)
{
if(strcmp(&buf[0], "i") != 0)
{
printf("%s \n", buf);
}
}
}
如此看來行
if(strcmp(&buf[0], "i") != 0)
並未真正發揮作用,因爲即使一行的第一個元素是「i」,該行的printf仍然打印。有趣的是,如果我添加此if語句裏面:
printf("%c \n", buf[0]);
「我」仍然可以打印,即使我試圖讓這未能if語句的條件。有趣的是,該行
printf("%s \n", &buf[0]);
只是打印同樣的事情
printf("%s \n", buf);
我試圖重新寫
if(strcmp(&buf[0], "i") != 0)
爲
if(strcmp(buf[0], "i") != 0)
但剛收到一個錯誤。
如何正確比較每行的第一個元素與所選字符「我」?
'buf [0]'是一個字符,你可以用另一個字符與'if(buf [0] =='i')進行比較......' –
哇,好像我只是用「代替'* * facepalm * Thanks! –
'if(buf [0]!='i')...' –