Итак, у меня есть этот код, чтобы получить три ввода от пользователя, один целочисленный тип и 2 символьных типа:

#include <stdio.h>

int main() {

    int carNumber;
    char customerName, carCode;

    printf("Enter Car Number: ");
    scanf("%d", &carNumber);
    printf("Enter Customer Name: ");
    scanf("%s", &customerName);
    printf("Enter Car Code: ");
    scanf("%s", &carCode);

    if (carCode == 'T'){
        printf("Toyota");
    }
    else if (carCode == 'H'){
        printf("Honda");
    }

    printf("\nCar Number: %d", carNumber);
    printf("\nCustomer Name: %s", customerName);
    return 0;

}

Хотя большая часть выводится правильно, customerName всегда печатает (null).

0
max1eee - 26 Ноя 2021 в 09:10
4
Переменные customerName и carCode являются одиночными символами . Они не могут содержать строки с завершающим нулем (которые вы пытаетесь прочитать в них). Если carCode должен быть одним символом, используйте строку формата " %c", чтобы прочитать его (обратите внимание на начальный пробел в строке формата). Если предполагается, что customerName является строкой, вам понадобится массив символов (например, char customerName[100];). Похоже, что вы пропустили некоторые важные части учебника.
 – 
Some programmer dude
26 Ноя 2021 в 09:15
Я попытался разделить их на две разные строки, как char customerName[20]; и char carCode;, чтобы различать их, но customerName теперь ничего не выводит.
 – 
max1eee -
26 Ноя 2021 в 09:26

1 ответ

Лучший ответ

Чтобы напечатать символ, это " %c", а не "%s". Либо используйте:

char customerName[30];
printf("Customer Name: %s", customerName);

ИЛИ

char customerName;
printf("Customer Name: %c", customerName);

Вот вся ваша программа:

#include <stdio.h>

int main()
{
    int carNumber;
    char carCode;
    char customerName[30];

    printf("Enter Car Number: ");
    scanf("%d", &carNumber);
    printf("Enter Customer Name: ");
    scanf("%s", customerName);
    printf("Enter Car Code: ");
    scanf(" %c", &carCode);

    if (carCode == 'T'){
        printf("Toyota\n");
    }
    else if (carCode == 'H'){
        printf("Honda\n");
    }

    printf("Car Number: %d\n", carNumber);
    printf("Customer Name: %s\n", customerName);
     printf("Car Code: %c\n", carCode);
    return 0;
}
0
Urvashi Soni 26 Ноя 2021 в 09:54
Я буду вводить имя, а не только один символ, и строка не может быть ключевым словом в C. Тем не менее, спасибо!
 – 
max1eee -
26 Ноя 2021 в 09:22
Я отредактировал свой ответ, спасибо, что указали.
 – 
Urvashi Soni
26 Ноя 2021 в 09:25
@ max1eee - я редактировал свой ответ, пожалуйста, проверьте.
 – 
Urvashi Soni
26 Ноя 2021 в 09:25
На несвязанном примечании: выводить первые строки новой строки - плохая привычка. Когда stdout (где printf записывает) подключен к терминалу, предполагается, что он буферизуется line , то есть вывод фактически записывается, когда есть новая строка. Таким образом, печатая начало новой строки, вы сбрасываете и печатаете предыдущую строку, а не текущую.
 – 
Some programmer dude
26 Ноя 2021 в 09:34
Хорошо, как тф. Я сделал это некоторое время назад, и он ничего не печатал, но когда я скопировал ваш, и он сработал, я был в замешательстве. Тем не менее, всем спасибо!
 – 
max1eee -
26 Ноя 2021 в 09:58