2014-11-01 2 views
1

У меня проблема с scanf. Я написал небольшую программу-калькулятор, но теперь я хочу, чтобы выйти из калькулятора, когда я вход один 0.Выход из scanf с меньшими аргументами, указанными

int main(void) { 
    int first; 
    char operation; 
    int second; 
    while(1) { 
     int correct = scanf("%d %c %d", &first, &operation, &second); 
     if(first == 0 && correct == 1) return(0); 
    } 
return 0; 
} 

Мой код не работает, потому что Scanf ждет, пока он не набрал 3 вещи. Могу ли я выйти из scanf, когда набирается только один 0?

+1

Это конкретная операционная система. В Linux вы, вероятно, можете заставить конец файла с помощью Ctrl D ... –

+1

Почему бы не иметь три 'scanfs'? –

+0

Потому что я хочу один ввод строки. – Mike

ответ

1

Прочитайте строку ввода пользователя, а затем отсканируйте ее.

#include <limits.h> 
// First determine a buffer large enough for reasonable worst case input 
// S_SIZE_INT is big enough for INT_MIN 
#define S_SIZE_INT (sizeof int * CHAR_BIT/3 + 3) 
#define S_SIZE_INT_CHAR_INT (S_SIZE_INT*2 + 1 + 3 /*sep*/ +2 /*eol*/ +10 /*CYA*/) 

int main(void) { 

    int first; 
    char operation; 
    int second; 

    while (1) { 
    char buf[S_SIZE_INT_CHAR_INT];   
    if (fgets(buf, sizeof buf, stdin) == NULL) { 
     break; // EOF detected 
    } 
    int correct = sscanf(buf, "%d %c %d", &first, &operation, &second); 

    // Best to test `correct` before testing `first` to know something was read 
    // As commented by @mafso 
    if (correct == 1 && first == 0) return(0); 

    } 
return 0; 
} 
Смежные вопросы