c - 读取文件的第一行不起作用

标签 c bgi

我正在读取一个文件(包含由换行符分隔的数字)并计算金额。问题是在读取文件并将金额存储在数组中时,它会跳过第一个金额的第一个字母,例如:- 如果第一行有 324,那么它将读取 24,如果该行有 3,那么它将读取垃圾vale 但其余部分都很好。

代码是

#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
static int den[9]={1000,500,100,50,20,10,5,2,1};
void main()
{
 clrscr();
 unsigned long long amt[9];
 unsigned long long temp=0,total=0;
 int c=0,i=0,j=0,gd=DETECT,gm,x=66,y=22,font=8;
 fflush(stdin);
 FILE *fp;
 fp=fopen("OPENCASH.TXT","r");
 while((c=getc(fp))!=EOF)
 {
  fscanf(fp,"%llu",&amt[i]);
  i++;
 }
 initgraph(&gd,&gm,"C:\\TC\\BGI");
 settextstyle(font,HORIZ_DIR,1);
 printf(" \t     ");
 for (i=0;j<50;j++)
 {
  printf("_");
 }
 outtextxy(x, y, "   The Closing Cash Denomination");
 printf("\n\n\n\t   ");
 for (i=0;i<50;i++)
 {
  printf("_");
 }
 font=5;
 settextstyle(font,HORIZ_DIR,1);
 x=30;
 y=87;
 outtextxy(x,y,"1000");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,7);
 printf("%llu",amt[0]);
 outtextxy(205,--y,"=");
 temp=den[0]*amt[0];
 total=total+temp;
 gotoxy(35,7);
 printf("%llu",temp);
 ++y;
 font=5;
 x=42;
 y=y+34;
 outtextxy(x,y,"500");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,9);
 printf("%llu",amt[1]);
 outtextxy(205,--y,"=");
 temp=den[1]*amt[1];
 total=total+temp;
 gotoxy(35,9);
 printf("%llu",temp);
 ++y;
 font=5;
 y=y+32;
 outtextxy(x,y,"100");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,11);
 printf("%llu",amt[2]);
 outtextxy(205,--y,"=");
 temp=den[2]*amt[2];
 total=total+temp;
 gotoxy(35,11);
 printf("%llu",temp);
 ++y;
 font=5;
 x=54;
 y=y+31;
 outtextxy(x,y,"50");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,13);
 printf("%llu",amt[3]);
 outtextxy(205,--y,"=");
 temp=den[3]*amt[3];
 total=total+temp;
 gotoxy(35,13);
 printf("%llu",temp);
 ++y;
 font=5;
 y=y+31;
 outtextxy(x,y,"20");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,15);
 printf("%llu",amt[4]);
 outtextxy(205,--y,"=");
 temp=den[4]*amt[4];
 total=total+temp;
 gotoxy(35,15);
 printf("%llu",temp);
 ++y;
 font=5;
 y=y+34;
 outtextxy(x,y,"10");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,17);
 printf("%llu",amt[5]);
 outtextxy(205,--y,"=");
 temp=den[5]*amt[5];
 total=total+temp;
 gotoxy(35,17);
 printf("%llu",temp);
 ++y;
 font=5;
 x=64;
 y=y+32;
 outtextxy(x,y,"5");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,19);
 printf("%llu",amt[6]);
 outtextxy(205,--y,"=");
 temp=den[6]*amt[6];
 total=total+temp;
 gotoxy(35,19);
 printf("%llu",temp);
 ++y;
 font=5;
 y=y+31;
 outtextxy(x,y,"2");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,21);
 printf("%llu",amt[7]);
 outtextxy(205,--y,"=");
 temp=den[7]*amt[7];
 total=total+temp;
 gotoxy(35,21);
 printf("%llu",temp);
 ++y;
 font=5;
 y=y+31;
 outtextxy(x,y,"1");
 font=6;
 settextstyle(font,HORIZ_DIR,1);
 outtextxy(104,y,"X");
 gotoxy(20,23);
 printf("%llu",amt[8]);
 outtextxy(205,--y,"=");
 temp=den[8]*amt[8];
 total=total+temp;
 gotoxy(35,23);
 printf("%llu",temp);
 y=y+9;
 outtextxy(264,y,"___________");
 y=y+27;
 outtextxy(150,y,"Total Cash");
 gotoxy(35,25);
 printf("%llu",total);
 getch();
}

最佳答案

while循环是错误的,

while((c=getc(fp))!=EOF)
 {
  fscanf(fp,"%llu",&amt[i]);
  i++;
 }

getc() 消耗一个字符,

测试如下,

 while(fscanf(fp,"%llu",&amt[i]) > 0)
 {
    i++;
 }

您还可以使用函数ungetc()取消getc()的效果。

关于c - 读取文件的第一行不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15905579/

相关文章:

c - 系统命令traceroute c 出错

字符设备捕获多个 (int) ioctl 参数

c - graphics.h 程序未在 Dosbox Windows 7 环境中运行

c - 哪里可以找到 'The Art and Science of C'源代码?

c - 如何在 C 中使用 putpixel() 时获得高帧率?

c++ - 使用 Turbo C++,如何在 C 中绘制图形?

c - 如何从C进入chroot环境?

用级数计算 pi

c - 在 C 中的函数之间传递指向结构的指针数组的问题

c - C图形中的洪水填充困难