c

时间:2016-04-12 15:00:38

标签: c input fgetc

所以我试图在c中实现堆栈。我写了所有的函数,但是我的fgetc函数有问题。所以这是我的代码的一部分:

    while (1) {
    printf("Choose an option: \
            \n 1 Push \
            \n 2 Pop \
            \n 3 Top \
            \n 4 Print \
            \n 5 Exit\n");

    option = fgetc(stdin);
    opt = ctoi(option);

    while ( opt < 1 || opt > 5 ) {
        printf("Wrong entry, let's try again: \n");

        option = fgetc(stdin);
        opt = ctoi(option);
    }

    switch ( opt ) {
    case 1: push(&stack, fgetc(stdin)); break;
    case 2: pop(&stack); break;
    case 3: top(&stack); break;
    case 4: print_stack(&stack); break;
    case 5: return 0; break;
    default: printf("impossible"); break;
    }

}

ctoi是我写的一个将char转换为int的函数。问题是,如果我输入,例如:

1

然后按回车键,该功能的第一次调用将询问我输入,但第二次调用(在推送功能调用内)将自动转发&#39; \ n&#39;作为一个论点,我想忽略&#39; \ n&#39;然后再问我一个输入。这可能吗?谢谢!

1 个答案:

答案 0 :(得分:5)

每次点击 Enter ,stdin中都会留下'\ n'。您可以通过#include <ctype.h>忽略它并编写

do {
    option = fgetc(stdin);
} while(isspace(option));
  

我不能,因为第二次调用是另一个函数的参数。

那么,您也可以编写自己的输入函数:

int getOption(void)
{
    int option;
    do {
        option = fgetc(stdin);
    } while(isspace(option))
    return option;
}