读取的scanf逗号分隔输入(read comma-separated input with sca

2019-07-20 13:38发布

我有以下输入:

AG23,VU,Blablublablu,8
IE22,VU,FooBlaFooBlaFoo,3
and so on...

我希望它使用像这样的代码“解析”与scanf函数:

char sem[5];
char type[5];
char title[80];
int value;

while(scanf("%s,%s,%s,%d", sem, type, title, &value) == 4) {
 //do something with the read line values
}

但是,代码的执行给了我: illegale instruction你将如何读以逗号分隔的文件中像这样?

Answer 1:

逗号不被认为是空白字符所以格式说明"%s"将消耗,一切就行书写超出了数组的边界其他sem导致未定义的行为。 要纠正这一点,你需要使用扫描集:

while (scanf("%4[^,],%4[^,],%79[^,],%d", sem, type, title, &value) == 4)

哪里:

  • %4[^,]读至多四个字符或直到遇到逗号表示。

指定宽度阻止缓冲区溢出。



Answer 2:

您所遇到的问题是,因为当你说

 scanf("%s,%s,%s,%d", sem, type, title, &value) 

什么情况是,你正在试图做的是,你是适合所有行成这仅仅是5个字符的第一个字符串。 因此, sem[5]溢出 ,和国有企业的各种有趣的事情。 为了避免这个问题,我尝试使用表达式%[^,] ,但它不太工作。 最好的办法是使用类似

while(scanf("%s%c%s%c%s%c%d", sem, &ch, type, &ch, title, &ch, &value) != EOF)

然后,你可以丢弃的ch 。 但是记住,最好使用其他功能,读取输入,如getchar()之类的东西,这是更快,更安全的在某种意义上。



文章来源: read comma-separated input with scanf
标签: c csv scanf