我意外地在一个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')...' –