2016-10-03 4 views
1
char theInput[10]; 
long option; 
int innerLoop = 1; 
char *dunno; 
while(innerLoop == 1){ 
    printf("\nType '1' to get your change, '2' to select another item, or '3' to add more funds: "); 
    fgets(theInput, sizeof theInput, stdin); 
    option = strtol(theInput, &dunno, 10); 
    if(option == 1){ 
    loop = 0; 
    innerLoop = 0; 
    }else if(option == 2){ 
    loop = 1; 
    outerLoop = 1; 
    innerLoop = 0; 
    firstLoop = 0; 
    }else if(option == 3){ 
    loop = 1; 
    innerLoop = 0; 
    outerLoop = 1; 
    firstLoop = 1; 
    }else{ 
    printf("\nInvalid input, please try again.\n"); 
    innerLoop = 1; 
    } 
} 

Результат этого кода заключается в том, что при первом запуске он печатает «тип» 1, чтобы получить «часть, за которой следует прерывание строки, за которым следует «Недопустимый ввод, повторите попытку». без ввода каких-либо команд из командной строки. Затем он печатает первый оператор printf, а затем принимает вход и работает. Он предназначен для печати первого оператора, а затем ожидания ввода.В цикле while fgets() запускается путем самозапускания в новой строке как входной сигнал

Ниже приводится вывод терминала.

«Тип„1“, чтобы получить ваши изменения,„2“, чтобы выбрать другой пункт, или„3“, чтобы добавить больше средств:. Неверный ввод, пожалуйста, попробуйте еще раз

Тип„1“, чтобы получить ваш изменить «2», чтобы выбрать другой элемент, или «3», чтобы добавить дополнительные средства: «

+3

Код, который вы опубликовали, не печатает упоминаемое вами вещество (например, «Тип« C », чтобы получить ваше изменение»). Вероятно, ошибка в той части вашего кода, которую вы не опубликовали .. – nos

+0

Спасибо за ваш ответ. Это моя ошибка обновления моего кода во время публикации - я изменил его с C, N и A на 1, 2, 3, потому что я думал, что обработка целых чисел может быть проще. Я обновил сообщение, так что все так, как в настоящее время работает на моем компьютере. – Vorkos

+2

Ранее неопубликованный код использовал функцию ввода, которая оставила '' \ n'' в 'stdin'. – chux

ответ

0

Можете ли вы попытаться сбросить стандартную версию?

Я ве добавил главный метод, если другие люди хотели бы иметь рабочий пример:

#include <stdio.h> 

int main() { 
    int loop = 0; 
    int outerLoop = 0; 
    int firstLoop = 0; 

    char theInput[10]; 
    long option; 
    int innerLoop = 1; 
    char *dunno; 
    while(innerLoop == 1){ 
    printf("\nType '1' to get your change, '2' to select another item, or '3' to add more funds: "); 
    fflush(stdout); 
    fgets(theInput, sizeof theInput, stdin); 
    option = strtol(theInput, &dunno, 10); 
    if(option == 1) { 
     loop = 0; 
     innerLoop = 0; 
    }else if(option == 2){ 
     loop = 1; 
     outerLoop = 1; 
     innerLoop = 0; 
     firstLoop = 0; 
    }else if(option == 3){ 
     loop = 1; 
     innerLoop = 0; 
     outerLoop = 1; 
     firstLoop = 1; 
    }else{ 
     printf("\nInvalid input, please try again.\n"); 
     innerLoop = 1; 
    } 
    } 
} 

Перед адаптации исходного кода, вы можете попробовать запустить этот пример в isoltion и посмотреть, если у вас есть Ожидаемые результаты?