跳过线,而文件扫描多行
问题描述:
此代码将读取文件,并且只要该文件打印这种格式跳过线,而文件扫描多行
word,12,34
words,40,20
another,20,11
我如何得到它做相同的,如果它有一个空行在之间喜欢这样,因为现在它只是给了我一个分段错误
word,12,34
words,40,20
another,20,11
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
FILE *pdata;
char buffer[1000];
char *token, *del=",";
int value1;
double value2;
pdata = fopen ("file.data", "r");
if(pdata == NULL)
{
printf("unable to open file \n");
exit(1);
}
while(fgets(buffer, sizeof(buffer), pdata) != NULL)
{
token = strtok(buffer, del);
value1 = atoi(strtok(NULL, del));
value2 = atof(strtok(NULL, del));
printf("%s is %.3lf\n", token, value1 + value2);
}
fclose(pdata);
return 0;
}
请帮助
答
陈二GES我会做:
char *del = ", "; // test for either space or comma
和(按我的问题先前的评论):
while(fgets(buffer, sizeof(buffer), pdata) != NULL)
{
char *temp;
token = strtok(buffer, del);
if (token != NULL) {
temp = strtok(NULL, del);
if (temp) value1 = atoi(temp);
temp = strtok(NULL, del);
if (temp) {
value2 = atof(temp);
printf("%s is %.3lf\n", token, value1 + value2);
}
}
的strtok
将如果没有令牌被发现返回NULL。传递一个NULL字符串到atoi
是什么给你seg错误,我猜。像这样,我们绝对确信不会发生。我测试了这个,它工作。
答
while(fgets(buffer, sizeof(buffer), pdata) != NULL)
{
if (buffer[0] == '\n') {
/* empty line */
continue;
}
token = strtok(buffer, del);
value1 = atoi(strtok(NULL, del));
value2 = atof(strtok(NULL, del));
printf("%s is %.3lf\n", token, value1 + value2);
}
测试'token'是否为NULL?如果是的话,不要在接下来的两行执行'atoi'转换('if(token!= NULL){value1 = ...'我认为应该这样做) – Floris 2013-04-21 05:20:20
如何以及在哪里做那 – Tatan1 2013-04-21 05:26:58
即时通讯 – Tatan1 2013-04-21 05:27:16