scanning strings and ints from stdio in C

I am trying to read two ints and a string input from stdio in this format:

22 CHEESE 2

into two different int variables and a string variable, as seen below.

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

The code properly reads the string, but immediately after the inputs are entered, when I test to see what the value of newId and newQuantity are, they are always these large ints that are never what I input. I check for the change in inputs by modifying my code to show the following:

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

and when I input 22 CHEESE 2, for instance, it prints -1957382872 CHEESE -1957382868. I was wondering if there was any way of rectifying this? Any help is appreciated.

Upvotes: 0

Views: 88

Answers (1)

klutt
klutt

Reputation: 31389

This printf("%d %s %d",&newId, newName, &newQuantity) is wrong and should be printf("%d %s %d",newId, newName, newQuantity), and is something you would have discovered if you enabled compiler warnings.

Here is the warnings:

$ 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

This question is a PERFECT example of why you always should provide a mcve when you ask a question. The problem was not where you thought it was, but instead in code you did not show us at first. It is also a perfect example of why you should have compiler warnings enabled and read them. They often provide very good clues. A warning is the compilers way of saying "This code is valid, but it probably does not do what you want."

Upvotes: 2

Related Questions