这个C代码有什么问题?
问题描述:
我写了一个C程序来分类一些字符串。我使用FILE流来读取和写入文件。但是我发现了一个问题。通常它应该对字符串进行分类,但事实并非如此。我认为这个代码是好的,所以我找不到问题。请帮帮我。这个C代码有什么问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char line[80]; //create a string
FILE *r_in = fopen("spooky.csv", "r"); // this is the source file
FILE *w_ufo = fopen("ufo.txt", "w"); // strings with "UFO" will be written to here
FILE *w_disapp = fopen("disappearance.txt", "w"); // strings with "Disappearance" will be written to here
FILE *w_others = fopen("others.txt", "w"); // others will be written to here
while (fscanf(r_in, "%79[\n]\n", line) == 1)
{
if(strstr(line, "UFO")) // I think here is the problem (with strstr())
fprintf(w_ufo, "%s\n", line);
else if(strstr(line, "Disappearance"))
fprintf(w_disapp, "%s\n", line);
else
fprintf(w_others, "%s\n", line);
}
fclose(w_ufo);
fclose(w_disapp);
fclose(w_others);
return 0;
}
源文件 “spooky.csv”:
30.685163,-68.137207,Type=Yeti
28.304380,-74.575195,Type=UFO
29.132971,-71.136475,Type=Ship
28.343065,-62.753906,Type=Elvis
27.868217,-68.005371,Type=Goatsucker
30.496017,-73.333740,Type=Disappearance
26.224447,-71.477051,Type=UFO
29.401320,-66.027832,Type=Ship
37.879536,-69.477539,Type=Elvis
22.705256,-68.192139,Type=Elvis
27.166695,-87.484131,Type=Elvis
我认为这个问题是的strstr(),请告诉这个问题。
答
问题出在fscanf
。您可能想要:
while (fscanf(r_in, "%79[^\n]\n", line) == 1)
^
或者只是使用fgets
作为Joachim Pileborg评论。
while (fgets(line, sizeof(line), r_in))
+0
谢谢Bro! – 0xEDD1E 2012-08-13 12:01:54
如果你想读整行,你应该使用'fgets'来代替。 – 2012-08-13 11:46:11