我正在尝试创建一个包含我的姓名,DOB和amp;的文本文件。地址。我正在尝试写入文件&然后再次打开它以显示信息。 继承人我得到了什么。 程序在执行期间停止。
int main()
{
FILE *f1;
char name,dob,addr;
printf("INFORMATION\n\n\n");
f1=fopen("DATA.txt","w");
printf("Name DOB Address") ;
fscanf(stdin,"%s %s %s",name,dob,addr);
fclose(f1);
fprintf(stdout,"\n\n");
f1=fopen("DATA.txt","r");
fscanf(f1,"%s %s %s",name,dob,addr);
fprintf(stdout,"%s %s %s",name,dob,addr);
fclose(f1);
return 0;
}
我正在尝试使用文件stdin中的函数fscanf读取数据,该函数指的是终端&然后将其写入文件而不是文件指针f1指向的文件。关闭文件DATA后,我再次重新打开它进行读取。文件中的数据及其中的信息将写入文件stdout,该文件引用屏幕。
答案 0 :(得分:3)
fscanf(stdin,"%s %s %s",name,dob,addr);
由于您使用%s
格式说明符扫描字符,因此您有未定义的行为。你应该有一个char数组
char name[20];
char dob[10];
char addr[15];
编辑:
f1=fopen("DATA.txt","r");
如果要将文件写入文件,以读取模式打开文件并写入文件无效,则应以写入模式打开文件。
答案 1 :(得分:0)
事实上你有很多问题,主要是
name
,dob
和address
声明为char
,它们至少应为char
个数组。fscanf()
是否读过这三个字符串。这是代码,修复了所有这些问题
#include <stdio.h>
int main()
{
FILE *f1;
char name[11], dob[11], addr[32];
printf("INFORMATION\n\n\n");
f1 = fopen("DATA.txt","w");
if (f1 == NULL) /* suppose you don't have write */
return -1; /* access in this directory!
* always check this...
*/
printf("Name DOB Address\n") ;
/* check that scanf did read 3 values */
if (fscanf(stdin, "%10s %10s %31s", name, dob, addr) == 3)
{ /* ^ add this to prevent overflowing the buffers */
/* You never write the data into the file */
fprintf(f1, "%s %s %s", name, dob, addr);
}
fclose(f1);
fprintf(stdout,"\n\n");
f1 = fopen("DATA.txt","r");
if (f1 == NULL) /* again check that the file was opened */
return -1;
if (fscanf(f1, "%10s %10s %31s", name, dob, addr) == 3)
fprintf(stdout, "\n\n%s %s %s\n", name, dob, addr);
fclose(f1);
return 0;
}
我已经用评论来解决问题,希望这会有所帮助。