Распечатка строки из массива, определенного структурой - PullRequest
0 голосов
/ 08 февраля 2020

Когда я запускаю код, я получаю только «amsung» для 2-го идентификатора и «» для 4-го, я пытался вставить несколько пробелов в строку «... Samsung», и он «исправил это», поэтому я Я думаю, что это как-то связано с тем, как определяется массив struct или как осуществляется доступ к строке. Так как я все еще новичок в структурах, и поэтому я не слишком уверен, что происходит, любые идеи будут с благодарностью.

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

const char * getSize(bool size);
const char * getUHD(bool UHD);

typedef struct tvs {
    int id;
    bool size; //have 1-3 for small to large
    bool UHD; //0 or 1 is yes/no
    char brand[];
}  tv;


tv tvs[4] = {
    { .id=1, .size=false, .UHD=false, .brand="Phillips"},
    { .id=2, .size=true, .UHD=true, .brand="Samsung"},
    { .id=3, .size=false, .UHD=true, .brand="LG"},
    { .id=4, .size=false, .UHD=false, .brand="Panasonic"}
};

int main(){

    int answer;
    answer = -1;
    int scanf_result;

    while(answer != 0){
        printf("\nPlease choose a TV ID. [0 to terminate the program]\n");
        scanf_result=scanf("%d",&answer);

        if((scanf_result == 0)|(scanf_result == EOF)){
            printf("\n *** Please enter an integer. ***\n");
            answer = -1;
            }

        if(answer >= 1 && answer <= 4) {
            printf("Selected TV ID # %d: \nBrand: %s \nSize: %s \nUHD: %s", answer, tvs[answer].brand, getSize(tvs[answer].size),getUHD(tvs[answer].UHD));
        }
        else {
            printf("Please select a valid TV ID.\n");
        }
    }

    return 0;
}

const char * getSize(bool size) {
    return size == true ? "Large" : "Medium";
}

const char * getUHD(bool UHD) {
    return UHD == true ? "Yes" : "No";
}

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

Он не скомпилирован для меня, только после изменения char brand[] на char* brand или достаточно большого числа в скобках.

После этого не выявлены упомянутые вами проблемы. Только тот, который вызван answer, неправильно использовался в качестве индекса, поскольку индексирование начинается с 0 в C, поэтому его следует использовать как answer - 1 в printf.

0 голосов
/ 08 февраля 2020

Я вижу 3 проблемы, я думаю

  1. вам нужно указать размер для вашего бренда char [] или вам нужно mallo c it.

  2. в основном вы используете tvs [ответ], но вам нужно использовать tvs [ответ -1], чтобы иметь правильное значение в массиве (массив начинается с 0)

  3. в основном вы еще printf («пожалуйста, выберите правильный ...»); напечатает его, когда вы ответите 0. Но 0 - действительный, он для выхода.

надеюсь, я вам помог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...