Phlash6
Phlash6

Reputation: 149

Scanning line of input with char and num

So I'm doing this problem where I need to calculate the average using pointers and without using strings. The user will input a letter and then a space followed by a number(an integer), the letter indicating if the number is positive(p) or negative(n) or if the user is done input-ing numbers(e).

I know I need a loop to continually read in number and add or subtract them from the sum until the letter "e" is input.

 program should have and use the following function
//    Precondition: value will be a pointer to where the input value is to     be stored. 
//    Postcondition: returns true if a number was read, or false if 
//    it was the end of the list. The int pointed to by value will be
//    set to the number input by this function, made negative or
//    positive depending on the character before it. int read_number(int*     value);

A sample input being p 20 p 20 p 10 p 10 e

output: 15

My problem as of now is my loop is only reading for two cycles of input, and even then it isn't printing the average. Also I'm supposed to use a pointer but given the directions i'm still not sure what the context is, I'm not seeing where a pointer is useful.

#include <stdio.h>

//precondition: value will be a pointer to where the input value is to be stored.
int main(){

    int sum;
    int num;
    int counter;
    float avg;
    char let;
 scanf("%c %d", &let, &num);
    for (counter=0;let == 'n' || let == 'p'; counter++){
        scanf("%c %d", &let, &num);
                if ( let == 'n'){
                sum-=num;
                }
                if (let == 'p'){
                sum+=num;
                }
        if ( let == 'e'){
             avg=sum/counter;
            printf("%f", &avg);
        }

            }
    return 0;

}

Upvotes: 0

Views: 81

Answers (1)

Spikatrix
Spikatrix

Reputation: 20244

Your input is:p 20 p 20 p 10 p 10 e.
The scanf before the loop scans 'p' and then skips the space and then scans 20. The next scanf in the loop reads the space as it is also a character and the %d fails to scan an int and the stops scanning. See the problem?

To fix it, change

scanf("%c %d", &let, &num);

To

scanf(" %c %d", &let, &num);//Note the space before %c

The space before %c gobbles up whitespace characters(if any) like newlines, spaces etc until the first non whitespace character.

Other problems include not initializing sum to 0 and using &avg instead of avg in the printf below

printf("%f", &avg);

Upvotes: 1

Related Questions