程序在执行时停止(文件处理)

时间:2015-01-17 18:41:05

标签: c

我正在尝试创建一个包含我的姓名,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,该文件引用屏幕。

2 个答案:

答案 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)

事实上你有很多问题,主要是

  1. 您将namedobaddress声明为char,它们至少应为char个数组。
  2. 您不检查文件是否实际创建(打开以供写入)。
  3. 您不会检查fscanf()是否读过这三个字符串。
  4. 您永远不会将数据写入文件。
  5. 这是代码,修复了所有这些问题

    #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;
    }
    

    我已经用评论来解决问题,希望这会有所帮助。