我有一个文件,每行看起来像这样:
cc ssssssss,n
其中两个第一个'c'是单个字符,可能是空格,然后是一个空格,然后's'是一个长度为8或9个字符的字符串,然后是逗号,然后是整数。
我是c的新手,我正在试图弄清楚如何将每行变为4个单独的变量(前两个字符中的每一个,字符串和数字)
有什么建议吗?我看过fscanf和strtok,但我不知道如何让它们为此工作。
谢谢。
答案 0 :(得分:5)
我认为这是一个C问题,正如问题所暗示的那样,而不是像标签那样的C ++。
阅读整行。
使用strchr
查找逗号。
用前两个字符做任何你想做的事。
将逗号切换为零,标记字符串的结尾。
从第四个字符开始调用strcpy
以提取sssssss
部分。
在逗号所在的一个字符上调用atoi
以提取整数。
答案 1 :(得分:0)
字符串是以第一个'\0'
结尾的字符序列。记住这一点。您所描述的文件中的内容不是字符串。
我认为n
是一个可以跨越多个小数位的整数,可能是负数。如果是这种情况,我相信您需要的格式字符串是"%2[^ ] %9[^,\n],%d"
。您需要传递fscanf
以下表达式:
FILE *
,int
。将fscanf的返回值存储到int中。如果fscanf返回负数,则表示存在EOF或其他读取错误等问题。否则,fscanf会告诉您它为其分配了多少个对象。在这种情况下,您正在寻找的“成功”值是3.其他任何意味着错误形成输入。
我建议您阅读fscanf manual以获取更多信息和/或澄清。
答案 2 :(得分:0)
fscanf功能非常强大,可用于解决您的任务:
以下是完整的解决方案:
FILE *f = fopen("input_file", "r");
do
{
char c1 = 0;
char c2 = 0;
char str[11] = {};
int d = 0;
if (4 == fscanf(f, "%c%c %10[^,],%d", &c1, &c2, str, &d))
{
// successfully got 4 values from the file
}
}
while(!feof(f));
fclose(f);