сканирование строк и целых из stdio в C - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь прочитать два целых и строковый ввод из stdio в следующем формате:

22 CHEESE 2

в две разные переменные типа int и строковую переменную, как показано ниже.

        int newId, newQuantity;
        char newName[20];
        scanf("%d %s %d",&newId, newName, &newQuantity);

Код правильно читает строку, но сразу после ввода входных данных, когда я проверяю, каковы значения newId и newQuantity, они всегда являются такими большими целыми числами, которые никогда не совпадают с тем, что я ввожу.Я проверяю изменение входных данных, изменяя свой код, чтобы он показывал следующее:

        int newId, newQuantity;
        char newName[20];
        scanf("%d %s %d",&newId, newName, &newQuantity);
        printf("%d %s %d",&newId, newName, &newQuantity);

, и когда я, например, вводю 22 CHEESE 2, он печатает -1957382872 CHEESE -1957382868.Мне было интересно, есть ли способ исправить это?Любая помощь приветствуется.

1 Ответ

2 голосов
/ 01 апреля 2019

Это printf("%d %s %d",&newId, newName, &newQuantity) неверно и должно быть printf("%d %s %d",newId, newName, newQuantity), и это то, что вы бы обнаружили, если вы включили предупреждения компилятора .

Вот предупреждения:

$ gcc main.c -Wall -Wextra
main.c: In function ‘main’:
main.c:7:18: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
         printf("%d %s %d",&newId, newName, &newQuantity);
                 ~^        ~~~~~~
                 %ls
main.c:7:24: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘int *’ [-Wformat=]
         printf("%d %s %d",&newId, newName, &newQuantity);
                       ~^                   ~~~~~~~~~~~~
                       %ls

Этот вопрос является ИДЕАЛЬНЫМ примером того, почему вы всегда должны указывать mcve , когда задаете вопрос.Проблема была не в том, где вы думали, а в коде, который вы сначала не показывали.Это также прекрасный пример того, почему вы должны включить предупреждения компилятора и читать их.Они часто дают очень хорошие подсказки.Предупреждение - это способ компилятора сказать: «Этот код действителен, но, вероятно, он не выполняет то, что вам нужно».

...