gpt4 book ai didi

c - 二进制文件-菜单写入和读取,c 语言问题

转载 作者:行者123 更新时间:2023-11-30 17:03:44 25 4
gpt4 key购买 nike

我必须编写一个程序来写入和读取二进制文件。应该有一个菜单可供选择。该文件应包含识别号、包含名称、参数等的元素以及价格。所以它必须是 int|sizeof char|char|double。

我的代码有一些问题。它编译。我打开文件并在其中写入。但它“不想”阅读自己。当我删除双斜杠注释进行检查时,程序会打印错误。我需要帮助。

这是代码:

#include <stdio.h>

void writing();
void reading();
int main ()
{
char choice;

/* do
{
printf("Enter 1 for writening in file and 2 for reading!\n");
scanf("%c", &choice);
// choice=getchar();
fflush(stdin);
}
while(choice!='1'&&choice!='2');
switch(choice)
{
case '1':writing(); break;
case '2':reading(); break;
} */

for (;;)
{
printf("Enter a number\n");
printf("Choose 1 for writening and 2 for reading\n");
//choice=getchar();
scanf("%c", &choice);
fflush(stdin);
if (choice=='1'||choice=='2')
break;
}
switch(choice)
{

case '1': writing (); break;
case '2': reading (); break;
}


return 0;
}
void writing ()
{
int j,i; // size of article
int number;
char article[50];
double price;

FILE*fp;

printf("Enter a string less than 50\n");
gets(article);

//scanf("%c", &article);

j=(sizeof (article));

printf("Enter a number:\n");
scanf("%d", &number);

printf("Enter a price:\n");
scanf("%lf", &price);

if (fp=fopen ("writing.data","ab")==NULL)
{
printf("Couldnt open the file\n");
}

fwrite(&number,sizeof (int),1,fp);

/* if(fwrite(&number,sizeof (int),1,fp)!=1)
{
printf("Error\n");
} */
fwrite(&j,sizeof(int),1,fp);

/* if(fwrite(&j,sizeof (int),1,fp)!=1)
{
printf("Error\n");
} */
fwrite(article,sizeof (article),1,fp);

/* if(fwrite(article,sizeof (article),1,fp)!=1)
{
printf("Error\n");
} */

fwrite(&price,sizeof (double),1,fp);

/*if(fwrite(&price,sizeof (double),1,fp)!=1)
{
printf("Error\n");
} */

fclose(fp);
}

void reading()
{
int i; // size of article
int number;
int number1;
char article[50];
double price;

FILE*fp;

printf("Enter a number to start the reading:");
scanf("%d", &number1);
if (fp=fopen ("writing.data","rb")==NULL)
{
printf("Couldnt open the file\n");
}
for (;;)
{
fread(&number,sizeof(int),1,fp);

/* if(fread(&number,sizeof(int),1,fp)!=1)
{
printf("Error");
break;
} */

fread(&i,sizeof(int),1,fp);

/* if(fread(&i,sizeof(int),1,fp)!=1)
{
printf("Error");
exit(1);
} */

fread(article,sizeof(article),1,fp);

/* if(fread(article,sizeof(article),1,fp)!=1)
{
printf("Error");
exit(2);
} */

fread(&price,sizeof (double),1,fp);

/* if(fread(&price,sizeof (double),1,fp)!=1)
{
printf("Error");
exit(3);
} */

if(number==number1)
{
printf("%d", number);
printf(article);
printf("%lf", price);

}
}
fclose(fp);

}

好的,所以我编辑了括号并且它有效。但没有检查。这就是我赞扬他们的原因。看来我对它们有疑问,你能给我更多关于 C 语言检查的信息并帮助我让这些检查工作吗?这些是警告warnings

*编辑2我再次从零开始输入代码,它起作用了。我修复了检查。

最佳答案

这是错误的:

if (fp=fopen ("writing.data","rb")==NULL)

您忘记正确放置括号。替换为:

if ((fp=fopen ("writing.data","rb"))==NULL)

在启用所有警告的情况下进行编译,您的编译器应该向您发出警告。

还有其他问题,例如:

if ((fp=fopen ("writing.data","rb")) == NULL)
{
printf("Couldnt open the file\n");
// you should exit here, it's pointless to continue
}
...

如果在 fpNULL 时继续执行,最终会得到文件指针为 NULLfread code> 这会导致未定义的行为(很可能你的程序会崩溃)。

关于c - 二进制文件-菜单写入和读取,c 语言问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com