下面的代码将要求输入,并且应该在之后打印 .
但是,我遇到了几个问题 .
Problems
确认输入后
-
程序停止工作 .
-
当它应该打印输入时,它会打印出奇怪的符号 .
Questions :
- 如何打印变量的整个值?
For ex : - 当我输入“John Lemon " for when it asks for " Name:”时 .
我可以打印“John Lemon " instead of " John” .
- 打印变量的第一个值后,如何继续完全打印变量的第二个值和第三个值?
For ex :
Sample Output
姓名:John Lemon
年龄:21岁
地址:Apple Street街41号,2/2
我该怎么做才能解决这个问题?
如果可能的话,请以外行的方式解释,因为我是C编程的新手 .
对不起,如果这看起来很乱 . 我尽力保持尽可能简单 .
#include<stdio.h>
char fname[]={"guest.dat"};
struct text
{
char name;
int age;
char address;
};
void printing ()
{
struct text t1;
FILE *fp;
fp=fopen(fname,"r");
printf("\nName: %c",t1.name);
printf("\nAge: %d",t1.age);
printf("\nAddress: %s",t1.address);
}
int main ()
{
FILE *fp;
int choice;
struct text t1;
fp=fopen(fname,"a+");
fread(&t1,sizeof(t1),1,fp);
printf("\nPlease enter name: ");
scanf("%c",&t1.name);
fflush(stdin);
printf("\nPlease enter age: ");
scanf("%d",&t1.age);
fflush(stdin);
printf("\nPlease enter address: ");
scanf("%s",&t1.address);
fflush(stdin);
printf("\nConfirm? (Y/N): ");
scanf("%c",&choice);
if ( choice == 'y' | choice == 'Y')
{
fp=fopen(fname,"a+");
fwrite(&t1,sizeof(t1),1,fp);
fclose(fp);
fflush(stdin);
system("cls");
printing();
}
else if ( choice == 'n' | choice == 'N')
{
fflush(stdin);
system("cls");
printing();
}
else
fflush(stdin);
system("cls");
printf("Please try again!");
system("pause");
}
1 回答
您的程序打印"weird symbols"因为
t1
从未在printing
函数中初始化 .这里你永远不会从文件中读取:
此外,这一行:
是错的 . 您使用的
%s
适用于char*
但address
是char
. 所以你必须使用%c
. 这同样适用于address
的scanf
.也许你真的想要
struct text
来控制字符串!?如果是这样,你应该使用char array
. 目前结构只能保存char(即名称和地址的单个字母) . 也许你真的想做:然后对
printf
和scanf
使用%s
而不是%c
.在这里你还有一些“奇怪的”代码:
除此之外,您的代码缺少对返回值的所有检查 . 始终检查
fopen
,fread
,fwrite
和scanf
返回的值 .