2016-10-16 2 views
-2

Так что в моем классе часть домашнего задания - это функция, которая вернет символ, который был введен.Программа, не возвращающая отсканированный символ

Я попытался создать этот образец кода, но он не работает, как я надеялся.

#include <stdio.h>  

char readCharacter(); 

int main(){ 
    char x; 

    x = readCharacter(); 

    printf("You inputted %c", x); 

    return 0; 
} 

char readCharacter(){ 
    char z; 
    printf("Input character\n"); 

    scanf("% c", &z); 

    return z; 
} 

Я ввожу персонажа, я решил ввести w, и программа сказала мне, что у персонажа был какой-то странный фанковый шрифт.

Фактический код с домашней работой, или, точнее, отрывок из него, является

#include <stdio.h>  // needed by printf, scanf() 
#include <ctype.h>  // needed by tolower() 
#include <stdlib.h> // for exit() 


double readNumber(char *prompt) { 
    double val; 

    printf("%s", prompt); 

    scanf("% lf", &val); 

    //if input is not a number, exit program 
    if (scanf("%lf", &val) != 1) { 
     printf("Invalid input.\n"); 
     exit(1); 
    } 

    return val; 
} 


char readYesOrNo(char* prompt) { 
    char yn; 

    printf("%s\n", prompt); 

    scanf("% c", &yn); 

    return yn; 
} 



int main() { 

    double bonus; 
    char yesNo; 



    yesNo = readYesOrNo("Did the worker get a bonus ? (y/n) "); 

    if (yesNo == 'y' || yesNo == 'Y') { 
     bonus = readNumber("Enter bonus: "); 
    } 
    else { 
     bonus = 0; 
    } 


return 0; 
} 

В реальном коде домашних заданий, функция readYesOrNo даже и не ждать меня к входу ничего, он просто отображает запрашивая ответ ay/n, затем переходит к следующей строке кода, не дожидаясь ввода пользователя и не получая ответа.

У меня нет подсказки, почему это не работает.

+0

Не ставьте пробел между% и с. –

+1

Вы произвольно вводите случайные пространства. Зачем? –

ответ

2

% c не является допустимым спецификатором формата. Но %c, вероятно, вы имели в виду.

Эта линия:

scanf("% c", &z); 

должно быть так:

scanf("%c", &z); 
+0

Это исправило проблему в моем примере кода и в опубликованном фрагменте, но когда я попытался применить это изменение к моему фактическому домашнему коду, код не позволял мне вводить что-либо, вместо этого просто отправлял приглашение, не позволяя мне вводить что-либо in. Мое первоначальное сообщение отредактировано, чтобы включить код моей домашней работы. –

+0

Appologies, вместо того, чтобы просто пропустить пропуски через вход, на самом деле он просто падает. –

+0

Я предполагаю, что вы исправили строку 'scanf («% lf », &val);», так? – selbie

Смежные вопросы