目前我正在做我的C编程作业。我遇到一个问题,我需要使用fprintf将一些记录添加到文本文件中,然后使用fscanf显示文件中的所有记录。但这里显示问题。它只跳过文本中的第一个字符,并显示其余字符。 文本文件中的示例
hello haha 400 500 60
hello2 haha2 500 600 70
我们需要在命令提示符下显示fscanf此文件。但结果显示我......
ello haha 400 500 60
hello2 haha2 500 600 70
剩下的角色没问题,但对于第一个角色,它会被跳过。 所以这是我的代码。
Fscanf的一部分
if ((ch = fgetc(fp)) != EOF){
while(fscanf(fp,"%s %s %d %d %d",code,name,&cost,&price,&stock) == 5)
{
printf("%-20s %-20s %-20d %-20d %-20d\n",code,name,cost,price,stock);
}
}else{
printf("Record not found in the stock database.\n");
puts("");
}
Fprintf的部分
fprintf(fp,"%s %s %d %d %d\n",code,name,cost,price,stock);
那么,如何阅读第一个字符?
答案 0 :(得分:1)
你的fgetc(fp)读了第一个hello的第一个h,所以现在文件指针是hello的e。 fscanf的进一步调用将从e开始读取。一个简单的灵魂就是在if条件的while循环上方添加一个printf(“%c”,ch)。即,
if ((ch = fgetc(fp)) != EOF){
printf("%c", ch);
while(fscanf(fp,"%s %s %d %d %d",code,name,&cost,&price,&stock) == 5)
{
printf("%-20s %-20s %-20d %-20d %-20d\n",code,name,cost,price,stock);
}
}else{
printf("Record not found in the stock database.\n");
puts("");
}
答案 1 :(得分:0)
你遇到的问题是fgetc()正在拉你的第一个角色,如评论中所述。为了获得第一个字符,您需要将此字符存储在某处并在开头将其附加到输出,或者使用不同的方法来检查第一个字符是否不是EOF。
请注意,如果您的第一个项目只有一个字符长,那么您也可能会导致明确的问题 - 那么您的fscanf()将不再有第一个要查看的字符串。
答案 2 :(得分:0)
if ((ch = fgetc(fp)) != EOF){
ungetc(ch, fp);
while(fscanf(fp,"%s %s %d %d %d",code,name,&cost,&price,&stock) == 5)