簡體   English   中英

使用指針輸入結構

[英]Using pointers to input in a struct

我試圖在此功能中從用戶獲取一些輸入到結構:

void adding(){
    Item *x = malloc(sizeof(Item));
    printf("Enter an integer.");
    scanf("%d", (x->any));
    printf("Enter a string.");
    scanf("%s", (x->text));
    printf("Which set would you like to add the Item to A/B?");
    while((scanf("%c", inp)) != ("A"||"B")){
        printf("Set does not exist\n");
    }
        if(A == inp)
            add(A, *x);
        else
            add(B, *x);

}

Item結構如下:

typedef struct anything{
    char text[MAXI];
    int any;
}Item;

最后被調用的add函數就是這個:

void add(Array *S,Item *x){
    bool rep = false;
    int i = 0;
    for(i = 0; i<(S->size); i++){
        if(compStructs(x,S->arr+i))
            rep = true;
    }
    if(rep == false){
            Item *p2 = realloc(S->arr, (S->size+1)*sizeof(Item));
            *p2 = *x;
            (S->size)++;
    }
    else
        printf("The item is already in the set.");

}

由於遇到第一個scanf()時發生運行時錯誤,因此我認為我在處理指針的方式上做錯了。

編譯所有警告和調試信息(例如gcc -Wall -g )。 學習使用調試器(例如gdb )。

然后,您應該使用scanf(3)的結果。 它給出了真正閱讀項目的數量。

while((scanf("%c", inp)) != ("A"||"B"))是非常錯誤的。 我確定編譯器會警告您!

應該

char inp = 0;
while (((inp=0),scanf(" %c", inp) == 1) && inp !=  'A' && inp != 'B')

首先scanf應該給出運行時錯誤。 scanf期望一個變量的位置,將從用戶讀取的值放在該變量中。

而不是scanf("%d", (x->any)); 您應該寫scanf("%d", &(x->any));

因為當您通過malloc分配內存時,所有字節都將被賦值為0。

所以基本上是通過寫scanf("%d", (x->any)); 您是說從用戶讀取到存儲位置0的put值。這是錯誤的。

當您調用add()函數時,我在您的代碼中發現了另一個錯誤。

它希望將Item *作為第二個參數。 而當您通過add(A, *x);調用它時add(A, *x); add(B, *x); 您傳遞的是Item而不是Item * bcz x本身是Item *類型變量。 所以應該這樣稱呼它add(A, x);

干杯:)

暫無
暫無

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

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