当我读取一个文件时,其数量由"\n“分隔。它的代码是:
while(fscanf(fp,"%llu",&amt) == 1)
{
fscanf(fp,"%ld",&amt);
printf("\n %d",i);
printf(" %ld",amt);
t_amt=t_amt+amt;
i++;
}问题是如果这个数字是
99000 100 100 000 123 456 12000 6000 780000
然后程序打印
1 100
2 123
3 12000
4 780000问题:
发布于 2013-04-23 14:37:51
这是在重复最后一个数字。请帮我纠正错误。
在尝试读取文件末尾之后,才会设置feof()。当读取最后一个值时,对fscanf()的下一次调用将失败,使amt保持不变。立即检查fscanf()的结果:
/* Returns number of assignments made. */
while(fscanf(fp," %llu",&amt) == 1)
{
}此外,我宣布amt为无符号长,以存储一个积极的价值。范围从1到9999999。请告诉我用于此目的的值或数据类型。
要确定整数类型的范围,请参阅header limits.h中定义的宏LONG_MIN/LONG_MAX、LLONG_MIN/LLONG_MAX、UINT_MAX、ULONG_MAX和ULLONG_MAX,但long由标准(来自C99标准5.2.4.2.1节的整数类型大小)保证,足以存储所需的值范围:
发布于 2013-04-23 14:45:35
问题2,此外,我宣布amt为无符号长长存储一个正值。范围从1到9999999。请告诉我用于此目的的值或数据类型。
如果amt的范围在0到9999999之间,则可以使用unsigned int类型"%u"。在范围内
甚至可以使用int类型的"%d",从-2147483647到+2147483647
发布于 2013-04-23 14:57:14
在尝试读取另一个值之前,您检查了!feof(fp) ,因此在上一次迭代中没有更多的数据要读取,但是您还没有到达文件的末尾--再次尝试读取失败,并且amt的值与上一次迭代相同。
一个更好的循环结构是将read命令合并到条件测试中,如下所示:
char line[1000];
while(fgets(line,1000,fp)!=NULL) {
if(sscanf(line,"%llu",&amt)==1) t_amt=t_amt+amt;
}请注意,使用fget和fscanf比使用fscanf要好。为什么?因为如果amt遇到单独的"-“或".”,它将无法将值赋值给它,但是仍然可以返回一个"1“,表示在发生这种情况时读取成功,大概是因为"-”和“。可能是有效数字中的第一个字符,即使数字不跟随。手册似乎没有提到这一点!
https://stackoverflow.com/questions/16172146
复制相似问题