这是我的代码:
FILE* fp,*check;
fp=fopen("file.txt","r");
check=fp;
char polyStr[10];
while(fgetc(check)!='\n')
{
fscanf(fp,"%s",polyStr);
puts(polyStr);
check=fp;
}
while(fgetc(check)!=EOF)
{
fscanf(fp,"%s",polyStr);
puts(polyStr);
check=fp;
}
现在,如果我的file.txt
是:
3,3, 4,4, 5,5
4,1, 5,5, 12,2
现在输出是:
,3,
4,4,
5,5,
,1,
5,5,
12,2,
现在为什么这两行的第一个字符都没有被读取?
答案 0 :(得分:4)
您的fgetc
来电正在吃这个角色。
您应该使用fgets
阅读整行,然后使用strtol
系列解析它们。你永远不应该使用任何*scanf
函数。
答案 1 :(得分:0)
首先让我们谈谈输入数据的格式。如果您只有<coef>,<exp>
而没有逗号,则您的列表似乎会更好地格式化。通过这种方式,您将拥有一个匹配的漂亮模式。所以你可以这样做:
fscanf(filep, "%d,%d", &coef, &exp)
获取值。您应该检查fscanf的返回值,以确保您正在读取2个字段。因此,如果一行的格式是以下“<coef>,<exp><white-space>
”的一组(其中空格是一个空格或一个换行符,那么您将能够执行以下操作:
do {
fscanf(filep, "%d,%d", &coef, &exp);
} while (fgetc(filep) != '\n');
此代码允许您获取对,直到您吃掉行尾。 while条件将使用空格或换行符。您可以将其包装在另一个循环中以处理多行。
请注意,我没有测试过这段代码,但其中的要点应该是清楚的。如果您还有其他问题,请评论。