读取文件并在结构上保存值时出现问题

问题描述 投票:2回答:1

这是我正在做的项目的一部分。基本上我想读一个名为“Circuit”的文本文件,里面有这个:

电路标题示例

V1 1 0 24

V2 3 0 15

R1 1 2 10000

R2 2 3 8100

Raa A 0 4700

为了给你一些上下文,这些值表示这样的电路:Circuit example我创建了一个代码,将所有这些值保存在一个结构中并打印出来以查看它们是否正确保存。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    typedef struct
    {
char type, name, noMaior, noMenor;
int value;
    }line;

    int main(void)
    {
line ramo[10];
FILE *ficheiro;
int i = 0, j;
char titulo[200];

if ((ficheiro = fopen("circuit.txt", "r")) == NULL)
    printf("Error opening file!");

fgets(titulo, 199, ficheiro);
    printf("%s", titulo);

while ((fscanf(ficheiro, "%c%c %c %c %d\n", &ramo[i].type, &ramo[i].name, &ramo[i].noMaior, &ramo[i].noMenor, &ramo[i].value)) != EOF) 
    {
        i++;
        //if (fgetc(ficheiro)=='.')
        //  break;  
    }
    fclose(ficheiro);

for (j = 0; j < i; j++)
    printf("%c%c %c %c %d\n", ramo[j].type, ramo[j].name, ramo[j].noMaior, ramo[j].noMenor, ramo[j].value);

return 0;

}

它输出文件中的相同文本,这是我的意图。现在这里有一个棘手的部分,我们必须在文件的末尾添加“.end”或“。END”,所以我做了这两条注释行来扫描文件中的一个点,如果遇到一个点就停止读取它将值保存到结构时会导致一些问题。这是我得到的输出:

电路标题示例

V1 1 0 24

2 3 0 15

1 1 2 10000

2 2 3 8100

3 2 0 4700

“break”按预期工作,因为如果我在文件中间放置一个点,它将停止读取后面发生的任何内容,但遗憾的是它忽略了第一个字母,并且根据调试工具它正在保存一个''(一个空格)代替字母(ramo [] .type)。我尽可能多地学习fscanf和fgetc的行为,但我无法得出任何关于为什么会发生这种情况的结论。

PS:尝试翻译一些变量以使其更容易阅读,但有些仍然是葡萄牙语,如“ficheiro”=文件。对我来说也很容易,我刚开始学习编码!

c structure scanf fgetc
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.