当我关闭命令提示符时,我的C语言基本交易程序不会存储任何修改 #包括 int main(){ //在出售和购买后,我希望它能修改这个 结构音乐{ int srno; 字符名[10]; 整数上限; int-lowerlimit; 内特瓦恩; }; //维护个人数据的结构 结构客户机{ int srno; 字符名[5]; 整数上限; int-lowerlimit; 内特瓦恩; }; 文件*f1; 整数选择、金额、价格; int x,代码,j=0; 结构音乐m1[]={1,“苹果”,100,98,10,2,“阀门”,100,98,10,3,“谷歌”,90,80,10,4,“特斯拉”,100,98,10}; 结构音乐m2[10]; f1=fopen(“4.DAT”、“rb+”); 如果(f1==NULL) { printf(“文件不存在!”); 出口(0); } 而(1) { printf(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuun”); printf(“菜单\n”); printf(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuun”); printf(“1)股票市场\n”); printf(“2)购买\n”); printf(“3)个人信息\n”); printf(“4)出售\n”); printf(“5)退出\n”); printf(“输入选项:”); scanf(“%d”,选择(&C); 开关(选择) { 案例1: { printf(“股票市场”); printf(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuun”); 对于(x=0;x
您使用了错误的运算符来测试相等性当我关闭命令提示符时,我的C语言基本交易程序不会存储任何修改 #包括 int main(){ //在出售和购买后,我希望它能修改这个 结构音乐{ int srno; 字符名[10]; 整数上限; int-lowerlimit; 内特瓦恩; }; //维护个人数据的结构 结构客户机{ int srno; 字符名[5]; 整数上限; int-lowerlimit; 内特瓦恩; }; 文件*f1; 整数选择、金额、价格; int x,代码,j=0; 结构音乐m1[]={1,“苹果”,100,98,10,2,“阀门”,100,98,10,3,“谷歌”,90,80,10,4,“特斯拉”,100,98,10}; 结构音乐m2[10]; f1=fopen(“4.DAT”、“rb+”); 如果(f1==NULL) { printf(“文件不存在!”); 出口(0); } 而(1) { printf(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuun”); printf(“菜单\n”); printf(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuun”); printf(“1)股票市场\n”); printf(“2)购买\n”); printf(“3)个人信息\n”); printf(“4)出售\n”); printf(“5)退出\n”); printf(“输入选项:”); scanf(“%d”,选择(&C); 开关(选择) { 案例1: { printf(“股票市场”); printf(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuun”); 对于(x=0;x,c,C,您使用了错误的运算符来测试相等性 #include<stdio.h> int main() { //After selling and buying i want it to modify this struct music { int srno; char name[10]; int upperlimit; int lowerlimit; int avarn; }; //Structure
#include<stdio.h>
int main() {
//After selling and buying i want it to modify this
struct music {
int srno;
char name[10];
int upperlimit;
int lowerlimit;
int avarn;
};
//Structure to maintain personal data
struct custormer {
int srno;
char name[5];
int upperlimit;
int lowerlimit;
int avarn;
};
FILE *f1;
int choice,amount,price;
int x,code,j=0;
struct music m1[] = {1,"Apple",100,98,10,2,"Valve",100,98,10,3,"Google",90,80,10,4,"Tesla",100,98,10};
struct music m2[10];
f1 = fopen("4.DAT","rb+");
if(f1==NULL)
{
printf("File does not exist!");
exit(0);
}
while(1)
{
printf("___________________________________\n");
printf("MENU\n");
printf("___________________________________\n");
printf("1) Stock Market\n");
printf("2) Buy\n");
printf("3) Personal Info\n");
printf("4) Sell\n");
printf("5) Exit\n");
printf("Enter choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:
{
printf("Stock Market\n");
printf("___________________________________\n");
for(x=0;x<4;x++)
{
printf("%d\t %s\t %d\t %d\t %d\n",m1[x].srno,m1[x].name,m1[x].upperlimit,m1[x].lowerlimit,m1[x].avarn);
fwrite(&m1,sizeof(m1),1,f1);
}
break;
}
case 2:
{
printf("Enter code of Stock:");
scanf("%d",&code);
printf("Enter number of stocks:");
scanf("%d",&amount);
printf("Enter price:");
scanf("%d",&price);
rewind(f1);
for(x=0;x<4;x++)
{
if(price>m1[x].lowerlimit&&price<m1[x].upperlimit)
{
if(m1[x].srno==code)
{
printf("Trasaction Is Succesful\n");
m1[x].avarn = m1[x].avarn-amount;
fwrite(&m1,sizeof(m1),1,f1);
m2[j].srno = j+1;
strcpy(m2[j].name,m1[x].name);
m2[j].avarn = amount;
j++;
}
}
}
break;
}
case 3:
{
for(x=0;x<j;x++)
{
printf("%d\t %s\t %d\n ",m2[x].srno,m2[x].name,m2[x].avarn);
fseek ( f1, sizeof(m1), SEEK_CUR ) ;
fwrite ( &m2, sizeof(m2), 1, f1 ) ;
}
break;
}
case 4:
{
printf("Enter code of stock to sell:");
scanf("%d", &code);
printf("Enter amount to sell:");
scanf("%d",&amount);
printf("Enter price to sell:");
scanf("%d",&price);
for(x=0;x<4;x++)
{
if(price>m1[x].lowerlimit&&price<m1[x].upperlimit)
{
if(m1[x].srno==code)
{
printf("Transaction is Sucessful\n");
m1[x].avarn = m1[x].avarn+amount;
fwrite(&m1,sizeof(m1),1,f1);
}
}
}
break;
}
case 5:
{
printf("Thanks!");
exit(0);
}
default:
{
printf("Invalid input!");
exit(0);
break;
}
}
}
fclose(f1);
return 0;
}
此语句将NULL
赋值给f1
,然后计算为false
您应该使用if(f1==NULL)
来测试它是否为NULL。或者干脆使用if(f1)
你正在做的另一件奇怪的事情是打开文件两次,第一个句柄泄漏。你应该先关闭它,或者只打开一次
此外,还应注意打开模式。第二次调用实际上会破坏文件的内容。读取。您使用了错误的运算符来测试相等性
#include<stdio.h>
int main() {
//After selling and buying i want it to modify this
struct music {
int srno;
char name[10];
int upperlimit;
int lowerlimit;
int avarn;
};
//Structure to maintain personal data
struct custormer {
int srno;
char name[5];
int upperlimit;
int lowerlimit;
int avarn;
};
FILE *f1;
int choice,amount,price;
int x,code,j=0;
struct music m1[] = {1,"Apple",100,98,10,2,"Valve",100,98,10,3,"Google",90,80,10,4,"Tesla",100,98,10};
struct music m2[10];
f1 = fopen("4.DAT","rb+");
if(f1==NULL)
{
printf("File does not exist!");
exit(0);
}
while(1)
{
printf("___________________________________\n");
printf("MENU\n");
printf("___________________________________\n");
printf("1) Stock Market\n");
printf("2) Buy\n");
printf("3) Personal Info\n");
printf("4) Sell\n");
printf("5) Exit\n");
printf("Enter choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:
{
printf("Stock Market\n");
printf("___________________________________\n");
for(x=0;x<4;x++)
{
printf("%d\t %s\t %d\t %d\t %d\n",m1[x].srno,m1[x].name,m1[x].upperlimit,m1[x].lowerlimit,m1[x].avarn);
fwrite(&m1,sizeof(m1),1,f1);
}
break;
}
case 2:
{
printf("Enter code of Stock:");
scanf("%d",&code);
printf("Enter number of stocks:");
scanf("%d",&amount);
printf("Enter price:");
scanf("%d",&price);
rewind(f1);
for(x=0;x<4;x++)
{
if(price>m1[x].lowerlimit&&price<m1[x].upperlimit)
{
if(m1[x].srno==code)
{
printf("Trasaction Is Succesful\n");
m1[x].avarn = m1[x].avarn-amount;
fwrite(&m1,sizeof(m1),1,f1);
m2[j].srno = j+1;
strcpy(m2[j].name,m1[x].name);
m2[j].avarn = amount;
j++;
}
}
}
break;
}
case 3:
{
for(x=0;x<j;x++)
{
printf("%d\t %s\t %d\n ",m2[x].srno,m2[x].name,m2[x].avarn);
fseek ( f1, sizeof(m1), SEEK_CUR ) ;
fwrite ( &m2, sizeof(m2), 1, f1 ) ;
}
break;
}
case 4:
{
printf("Enter code of stock to sell:");
scanf("%d", &code);
printf("Enter amount to sell:");
scanf("%d",&amount);
printf("Enter price to sell:");
scanf("%d",&price);
for(x=0;x<4;x++)
{
if(price>m1[x].lowerlimit&&price<m1[x].upperlimit)
{
if(m1[x].srno==code)
{
printf("Transaction is Sucessful\n");
m1[x].avarn = m1[x].avarn+amount;
fwrite(&m1,sizeof(m1),1,f1);
}
}
}
break;
}
case 5:
{
printf("Thanks!");
exit(0);
}
default:
{
printf("Invalid input!");
exit(0);
break;
}
}
}
fclose(f1);
return 0;
}
此语句将NULL
赋值给f1
,然后计算为false
您应该使用if(f1==NULL)
来测试它是否为NULL。或者干脆使用if(f1)
你正在做的另一件奇怪的事情是打开文件两次,第一个句柄泄漏。你应该先关闭它,或者只打开一次
此外,还应注意打开模式。第二次调用实际上会破坏文件的内容。读取。使用
put()
打印输出行,或在字符串末尾包含换行符。使用put())
打印输出行,或在字符串末尾添加换行符。感谢您的回复!很抱歉(f1=NULL),我在这里复制程序时犯了一个错误。我按照你说的做了,删除了文件1的双开口,而只是使其为rb+,但问题仍然存在,每当我重新运行程序检查文件4.DAT中的数据时,它只显示原始表,而不是修改的表。你能帮我一下吗?请阅读T感谢您的回复!很抱歉(f1=NULL),我在这里复制程序时犯了一个错误。我按照你说的做了,删除了文件1的双开口,而只是将其改为rb+,但问题仍然存在,每当我重新运行程序检查文件4.DAT中的数据时,它只显示原始表,而不是修改后的表。你能帮我一下吗?请阅读