我是C的初学者。 我在c。做了一个简单的游戏。
我有一个.txt文件,用于存储玩家的分数,例如
gse
12
CKY
8
然后我在C中有这个功能,该功能根据上面的.txt文件输出得分。
int n = 0;
int c;
int p=0;
char name[NAME_LENGTH] = { 0 };
char score[NAME_LENGTH] = { 0 };
FILE *fp = fopen("scoreBoard.txt", "r");
if (fp == NULL) {
printf("no score available\n");
fflush(stdin);
getchar();
return;
}
system("cls");//clears the screen
if (fp){
while((c=getc(fp)!=EOF)){
if(n%2==0){
fgets(name,NAME_LENGTH,fp);
printf("%d ",n/2+1); //index
printf("%s",name);
n++;
}
if(n%2==1){
fgets(score,NAME_LENGTH,fp);
printf("%s",score);
n++;
}
}
fclose(fp);
}
printf("=======SCORE=======\n");
printf("Enter AnyKeys");
Sleep(100);
getchar();
getchar();
//fflush(stdin);
}
输出如下
1 se
12
2 KY
8
我尝试过很多东西,但我无法理解。
我想有些事情正在吞噬代码。问题是(c=getc(fp)!=EOF)
吗?我应该操纵指针以解决这个问题吗?
提前致谢。
答案 0 :(得分:1)
如果对collectionView
的调用成功,它会将文件位置指示符增加一。
#pragma pack(push, 1)
typedef struct Pix
{
uint16_t R, G, B;
int32_t BW;
}Pix;
#pragma pack(pop)
//Estructura del header del bmp:
#pragma pack(push, 1)
typedef struct BitMap
{
int16_t Signature; //Tipo de archivo (BM)
int32_t Reserved1; //reservado, debe ser cero
int32_t Reserved2; //reservado, debe ser cero
int32_t DataOffSet; //Offset de los datos de los pixeles
int32_t Size; //Tamaño del resto del header
int32_t Width; //Ancho del bmp en pixeles
int32_t Height; //Alto del bmp en pixeles
int16_t Planes; //Numero de planos -> seteado en 1
int16_t BitsPerPixel; //Número de bits por pixel
int32_t Compression; //Tipo de compresion, usualmente 0
int32_t SizeImage; //Tamaño en bytes del bitmap
int32_t XPixelsPreMeter; //Pixeles horizontales por metro
int32_t YPixelsPreMeter; //Pixeles verticales por metro
int32_t ColorsUsed; //Número de colores usados
int32_t ColorsImportant; //Número de colores "importantes"
struct Pix *pixels; //Declara estructura Pix tipo *pixels
}BitMap;
#pragma pack(pop)
要解决此问题,您可以将fgetc
直接用于一个变量,而不是gse
^
file position indicator will be here after the first call fgetc in
your example.
和fgets
:
name
答案 1 :(得分:0)
尝试ungetc()功能
未读取角色的功能称为ungetc,因为它会反转getc的动作。
在你的代码中尝试: -
while((c=getc(fp)!=EOF)){
ungetc (c,fp);
// rest of your code
}
ungetc函数将字符c
推回到输入流fp
。因此,来自流的下一个输入将在其他任何内容之前读取c。