sscanf语句停止程序

时间:2015-03-05 17:05:09

标签: c file struct fgets scanf

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


struct urunler {
    int kod;
    char Ad[16];
    int stok;
    float fiyat;
};

void urunTara(struct urunler* inputs,int *amount);

int main()
{
    struct urunler Urun[50];
    int amount = 0;



    urunTara(Urun,&amount);
}

void urunTara(struct urunler *inputs,int *amount){
    char Temp[150];
    FILE *fPtr;
    fPtr = fopen("urunler.txt","r");
    if(fPtr == NULL){
        printf("File not found!");
    } else {
        while(!feof(fPtr)){
            fgets(Temp,100,fPtr);
            sscanf(Temp,"%d %s %d %f",&(inputs[*amount].kod),inputs[*amount].Ad,&(inputs[*amount].stok),&(inputs[*amount].fiyat));
            *amount++;
        }
    }

};

我对C比较陌生,刚开始学习结构。文本文件包含以下内容:

25 televizyon 1000 150.25
40 video 500 25.45
50 plazma 75 2300.50
76 dvd 20000 90.00
85 supurge 700 110.75
90 buzluk 250 10.00
95 teyp 1250 8.99 

我在这里遇到的问题是sscanf。当我在主要功能中完成所有这些工作时,效果很好。但是,当我尝试在函数urunTara中执行此操作时sscanf语句出错并且程序停止工作。我使用scanf成功地将值传递给&amp;(输入[* amount] .kod)和其他地址。但无法理解这个sscanf声明的问题是什么。

1 个答案:

答案 0 :(得分:1)

*amount++;

类似于

*(amount++);

表示取消引用amount,然后将amount增加到该元素之后。
哪个不正确。

*amount++; 更改为 (*amount)++; ,这会增加取消引用的值。

有关详细信息,请参阅thisthis