2017-09-09 26 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

相关问题