我有一个文件,其中每一行如下所示:
cc ssssssss,n
其中前两个'c'是单个字符,可能是空格,然后是空格,然后是's'是一个8或9个字符长的字符串,然后是一个逗号,然后是一个整数。
我对c真的很陌生,我试图弄清楚如何将它放入每行4个单独的变量中(前两个字符中的每一个,字符串和数字)
有什么建议么?我看过 fscanf 和 strtok 但我不确定如何让它们为此工作。
谢谢你。
我有一个文件,其中每一行如下所示:
cc ssssssss,n
其中前两个'c'是单个字符,可能是空格,然后是空格,然后是's'是一个8或9个字符长的字符串,然后是一个逗号,然后是一个整数。
我对c真的很陌生,我试图弄清楚如何将它放入每行4个单独的变量中(前两个字符中的每一个,字符串和数字)
有什么建议么?我看过 fscanf 和 strtok 但我不确定如何让它们为此工作。
谢谢你。
正如问题所暗示的那样,我假设这是一个 C 问题,而不是标签可能暗示的 C++。
读入整行。
用于strchr
查找逗号。
对前两个字符做任何你想做的事情。
将逗号换成零,标记字符串的结尾。
strcpy
从第四个字符开始调用以提取sssssss
部分。
调用atoi
逗号过去的一个字符来提取整数。
字符串是一个以第一个结尾的字符序列'\0'
。请记住这一点。您描述的文件中的内容不是字符串。
我认为n
是一个整数,可以跨越多个小数位并且可能是负数。如果是这种情况,我相信您需要的格式字符串是"%2[^ ] %9[^,\n],%d"
. 您需要传递fscanf
以下表达式:
FILE *
,int
.将 fscanf 的返回值存储到 int 中。如果 fscanf 返回负数,则您遇到了诸如 EOF 或其他一些读取错误之类的问题。否则, fscanf 会告诉您它为多少对象赋值。在这种情况下,您正在寻找的“成功”值是 3。任何其他都意味着输入格式不正确。
我建议阅读fscanf 手册以获取更多信息和/或澄清。
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);