2017-09-09 27 views
0

我意外地在一個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) 

但剛收到一個錯誤。

如何正確比較每行的第一個元素與所選字符「我」?

+0

'buf [0]'是一個字符,你可以用另一個字符與'if(buf [0] =='i')進行比較......' –

+0

哇,好像我只是用「代替'* * facepalm * Thanks! –

+1

'if(buf [0]!='i')...' –

回答

0

您可以使用strncmp()而不是strcmp()來比較字符串的n個元素。

if的說法應該是像if((strncmp(buf,"i",1))!=0)。現在就只是比較one元素即存儲在bufi字符串1st元素。

但是對於第一個元素,您可以簡單地使用if(buf[0]=='i')

+0

你不需要'strcmp()'來比較一個字符串的單個元素,你可以直接比較字符。 – Havenard

+0

是的,如果有人想要cmpare 1或字符串的某個元素,那麼他/她可以使用'strncmp'來比較n個元素。謝謝@ Havenard。 – krpra

相關問題