簡體   English   中英

來自.txt 文件的值不會被讀入 C 程序中的數組

[英]Value from .txt file wont be read into array in C program

我有一個問題,我想將每一行讀入結構數組,但它不會將例如“Alvedon”下的“20 30”讀入數組中的 0 和 1,而是將整個“20 30”讀入數組. 如何將 20 和 30 放置在結構數組中的不同地址中?

代碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXANTAL 10000
#define MAXORD 20
#define PAKETSTORLEKAR 10
#define FILNAMNSTORLEK 20

struct lakemedel
{
    char namn[MAXORD];
    int antalForpackningar[PAKETSTORLEKAR];
    int saldo[PAKETSTORLEKAR];
};
typedef struct lakemedel Lakemedel;

void lasFil(Lakemedel lasLakemedelRegister[], int *pAntalLakemedel, char lasFilnamn[]);

int main()
{
    Lakemedel lakemedelRegister[MAXANTAL];
    char filnamn[FILNAMNSTORLEK];
    int antalLakemedel = 0;
    lasFil(lakemedelRegister, &antalLakemedel, filnamn);
    int val;

    printf("\n\n");
    printf("%s\n", lakemedelRegister[0].namn);
    printf("%s\n", lakemedelRegister[1].namn);
    printf("%s\n", lakemedelRegister[0].antalForpackningar[1]);

    return 0;
}

void lasFil(Lakemedel lasLakemedelRegister[], int *pAntalLakemedel, char lasFilnamn[])
{
    printf("Skriv in fil du vill anvanda: ");
    scanf(" %s", lasFilnamn);
    int i,f,s = 0;
    FILE *fp;
    fp=fopen(lasFilnamn, "r");
    if(fp!=NULL)
    {
        while(fscanf(fp,"%[^\n]\n", lasLakemedelRegister[i].namn)==1)
        {
            for(f=0; f<PAKETSTORLEKAR;f++)
            {
            fscanf(fp, "%[^\n]", lasLakemedelRegister[i].antalForpackningar[f]);
            }
            printf("\n");
            fscanf(fp, "%[^\n]\n", lasLakemedelRegister[i].saldo);
            (*pAntalLakemedel)++;
            i++;
        }
    fclose(fp);
    }
}

文本文件:

Alvedon
20 31
100 32
Ipren
10 41
30 42

lasFil()中,您永遠不會初始化變量i ,因此當您將其用作數組lasLakemedelRegister中的索引時,您最終會出現未定義的行為。

表達式int i,f,s=0; 只會初始化s=0

如果您打開了編譯器警告,大多數理智的編譯器都會警告您這一點。 請始終使用-Wall進行編譯

您還使用了錯誤的格式說明符來讀取整數(使用%d ),並且fscanf()在這種情況下需要一個指針。 -Wall也應該警告過你。

內部讀取循環看起來很亂。 要解決此問題,您必須提供有關如何解釋數據文件的更多信息。

您閱讀的所有內容都是字符串格式,因此由您決定如何將其轉換為 int 或任何您想要的。 在這種情況下,您需要使用 function strtok 將字符串“20 31”拆分為兩個字符串“20”和“31”,然后使用 function atoi 將字符串轉換為 int 20 和 31。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM