在main中输入与输入混合的函数

时间:2014-11-17 19:38:32

标签: c input switch-statement scanf

让我说我当然有一个无效功能和主要功能。

void function() {
    char a, b;
    printf("Enter two chars: ");
    scanf("%c %c", &a, &b);
    // there will be a code that does something with entered chars ...
}

int main() {
    char c;
    while(1) {
        switch(c = getchar()) {
        case 'v':
            function();
            break;
        case 'c':
            someOtherFunc();
            break;
        }
    }
}

现在问题是,当我运行程序时,按v,它会调用function(),我想要输入2个字符。好吧,我把xc放在一起就是它从交换机调用另一个不正确的函数,因为我不想再运行另一个函数。我需要对那些函数做些什么第一个功能中有2个字符。它是混合输入。我怎么解决这个问题?只有当功能100%完成其工作时,我才需要切换。我的程序中有几个函数,所有函数都无效。建议?

1 个答案:

答案 0 :(得分:0)

让我们看看您的计划中发生了什么,是吗?

执行到达

switch(c = getchar())

getchar()等待输入。按v,然后按 Enter getchar()使用v并将其存储在c中。 function()被称为。{/ p>

printf中的function()打印"Enter two chars: ",执行到达scanf

%c 中的第一个scanf会看到输入流中的\n字符并使用它%c之间的空格将跳过空白字符(如\n' '等),如果有的话,直到第一个非空白字符。您在xc消费%c中输入scanf和第二个x,而输入流中保留cfunction()退出。

break;中的main执行并突破switchwhile循环开始下一次迭代。执行到达

switch(c = getchar())

getchar() 会看到前一个c 遗留的scanf并使用它并将其存储在c中。 someOtherFunc();被称为。{/ p>


看到故障? \n角色破坏了一切。作为@BLUEPIXY has already explained how to solve the problem,请在%c的第一个scanf之前使用空格,或在调用getchar()之前使用function()someOtherFunc()来解决问题。如果你现在想知道空间是做什么的,那么再次阅读我的答案。我已经指定了%cscanf之间的空格。至于getchar(),它会使用getchar()语句中switch留下的换行符。