c - 将文本文件中的值扫描到结构中

标签 c

我在使用 fscanf_s 函数时遇到问题。 我编写了一个代码,它询问用户是否有用于数据输入的文件,如果有,则读取数据并将值放入结构中。好吧,这不起作用。 我尝试自己查找错误,但失败了,所以我在这里寻求帮助。

用户输入内容的第一部分,程序根据输入创建文本文件,但如您所见,扫描部分不起作用。任何帮助都会很棒。

  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 10
char *filename = "file.txt";
    char savefile[20];

    struct Employee
    {
        char name[20];
        float rate;
        float hours;

    }employee; 


    int main(void)
    {

        FILE *file;
        FILE *output;
        FILE *input;
        int count = 0;
        int yn;
        int x = 0; int q = 0;
        int o = 0; int k = 0;
        int y = 0; int i = 0;
        struct Employee guys[size];



        printf("Do you have a file? 1. Yes 2. No\n");
        scanf_s("%d", &yn);
        if (yn == 2)
        {   

            errno_t err = fopen_s(&file, filename, "w");

            for (q = 0; q < size; q++) 
            {
                puts("\ntype name: (type -1 to quit) \n");
                scanf_s("%s", &guys[q].name, 20);
                if (strcmp(guys[q].name, "-1") == 0) { break; }

                puts("\ntype hourly rate: (type -1 to quit)\n");
                scanf_s("%f", &guys[q].rate);
                if (guys[q].rate == -1) { break; }

                puts("\ntype hours worked: (type -1 to quit)\n");
                scanf_s("%f", &guys[q].hours);
                if (guys[q].hours == -1) { break; }
                count++;
            }

            for (int q = 0; q < count; q++)
            {
                fprintf(file, "%s %f %f\n",  guys[q].name,guys[q].rate, guys[q].hours);
            }
            fclose(file);

        }

        if (yn == 1)
        {
            errno_t err = fopen_s(&input, filename, "r");

            if (err != 0)
            {
                printf("Unable to open up %s", filename);
                return;
            }

            while (!feof(input))
            {
                fscanf_s(file, "%s" "%f" "%f", &guys[i].name,20,&guys[i].rate, &guys[i].hours);
                i++;
            }
            fclose(input);
        }

我使用在第一部分中创建的文件作为第二部分的输入。我还测试了没有 feof 循环的 fscanf_s() 。同样的问题仍然发生。错误不断弹出,表示在program05.exe中的0x77506165(ntdll.dll)处抛出异常:0xC0000005:访问冲突写入位置0xCCCCCCF0。

最佳答案

您的读取代码中有两个问题导致崩溃。

  1. 您正在将关闭文件指针传递给 fscanf_s 函数。

    fclose(文件);

  2. 您正在向 fscanf_s 函数传递无效地址 20

       fscanf_s(file, "%s" "%f" "%f", &guys[i].name,20,&guys[i].rate, &guys[i].hours);
    

    应该改为

     fscanf_s(input, "%s" "%f" "%f", &guys[i].name,&guys[i].rate, &guys[i].hours);
    

我建议您不要使用

while (!feof(input))

请采用以下方法。

while (fscanf_s(input, "%s %f %f", &guys[i].name,&guys[i].rate, &guys[i].hours) == 3)
{
    i++;
}

关于c - 将文本文件中的值扫描到结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51805977/

相关文章:

c - 不同编译器解析命令行的不同段错误

c - 端口扫描时的随机端口连接

c - 尝试为结构中的字符串分配内存时出现段错误

计算未排序数据中唯一对和非唯一对实例的数量

C 队列,按排序顺序复制元素

c++ - 是否有公式可以找到 float 中指数或有效位数的位数?

c - SDL2_mixer 在 mac 上初始化失败(运行时)

c - for 循环仅打印最后一项 (C)

c++ - 静态编译过剩?

python - C 和 python 集成