...打印出来,下面是我的程序,求大神帮忙看看,谢谢了~~
发布网友
发布时间:2024-10-21 21:26
我来回答
共3个回答
热心网友
时间:2024-11-30 05:34
问题在你从终端输入数据的时候,从终端输入的数据都保存在了缓存里,当你输入数据的时候你做了两个操作,一、输入数据(比如是 9);二、按回车。这样一来你的缓存里其实有两个数据9和回车,所以当你第一个scanf的时候读的是9,第二个scanf的时候读的是回车(\n)。要避免这种情况有两种方法,最直接的是每次在你调用scanf之前清除缓存【fflush(stdin);】,第二种是每次scanf调用完之后调用一次getchar(),并且返回值可以不给任何变量。
>printf("请输入第%d个人的号码:",num);
>scanf("%d",&work[num].id);
=>
printf("请输入第%d个人的号码:",num);
fflush(stdin);
scanf("%d",&work[num].id);
>printf("请输入第%d个人的号码:",num);
>scanf("%d",&work[num].id);
=>
printf("请输入第%d个人的号码:",num);
scanf("%d",&work[num].id);
getchar();
热心网友
时间:2024-11-30 05:36
fwrite(&work[i],sizeof(WORK),1,file); 这里应该有问题吧, 会写越界的。
应该是:fwrite(&work[i],sizeof(WORK[i]),1,file);
热心网友
时间:2024-11-30 05:32
#include<stdio.h>
#include<stdlib.h>
int num=1;
struct WORK{
int id;
char name[20];
double salary;
};
struct WORK work[100];
void input(){
char ch;
for(num=0;num<100;num++)
{
printf("请输入第%d个人的号码:",num);
scanf("%d",&work[num].id);
printf("请输入第%d个人的姓名:",num);
scanf("%s",work[num].name);
printf("请输入第%d个人的工资:",num);
scanf("%lf",&work[num].salary);
printf("是否继续输入(Y/N):");
getchar();
scanf("%c",&ch);
if(ch == 'N'||ch == 'n')break;
//else if(ch == 'Y'||ch == 'y')
//num++;continue;
}
}
void save(){
int i=1; //先定义
FILE* file = fopen("a.txt","wb");
if(!file){
printf("文件打开失败!\n");return;
}
for(;i<=num;i++)
fwrite(&work[i],sizeof(work),1,file);
fclose(file);
file = NULL;
}