我必须编写一个用于编写和读取二进制文件的程序。应该有一个菜单供选择。该文件应具有识别号,具有名称,参数等的文章和价格。所以它必须是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
* EDIT2 我再次输入零码的代码,它的工作原理。我修好了支票。
答案 0 :(得分:0)
这是错误的:
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
}
...
如果在fp
为NULL
时继续执行,则最终会出现fread
,其中文件指针为NULL
,这会导致未定义的行为(很可能是您的程序)会崩溃。)