C 函数中的输入与主函数中的输入混合

C 函数中的输入与主函数中的输入混合,c,input,switch-statement,scanf,C,Input,Switch Statement,Scanf,假设我有一个void函数和main函数 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

假设我有一个void函数和main函数

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键,它调用了一个函数,这个函数需要我输入2个字符。好的,我把x和c放进去,它做的是从开关调用另一个函数,这是不正确的,因为我还不想运行另一个函数。我需要对第一个函数中的这两个字符做一些处理。它是混合输入。我怎样才能解决这个问题?我需要有开关可用,只有当功能是100%完成其工作。我的程序中有几个函数,它们都是无效的。建议?

让我们看看你们的节目中发生了什么,好吗

执行范围

switch(c = getchar())
switch(c = getchar())
getchar等待输入。按v键,然后按Enter键。getchar使用v并将其存储在c中。函数被调用

函数printfin打印输入两个字符:执行到达scanf

scanf中的第一个%c在输入流中看到\n字符并使用它。%cs之间的空格将跳过空白字符,如\n、“”等,如果有的话,直到第一个非空白字符。输入xc,scanf中的第二个%c消耗x,而c保留在输入流中。函数退出

休息;在main中执行并断开开关。while循环开始下一次迭代。执行范围

switch(c = getchar())
switch(c = getchar())
getchar会看到前一个scanf留下的c,并使用它并将其存储在c中。其他功能;被称为


看到故障了吗?\n角色破坏了这一切。例如,在scanf的第一个%c之前使用空格,或者在调用函数和someOtherFunc之前使用getchar来修复此问题。如果你现在想知道这个空间是做什么的,那么请再次阅读我的答案。我已经指定了您的scanf中%cs之间的间距。至于getchar,它使用switch语句中getchar留下的换行符。

scanf%c%c,&a,&b;->扫描%c%c,&a,&b;这对我来说并不是真的有效,它计算空间。.我必须从行的开头输入字符。.函数;->getchar;作用然后扫描%c%c,&a,&b@BLUEPIXY你能给我解释一下吗?@febeks我想这是因为缓冲的I/O。当你输入v时,它在你的输入缓冲区中仍然是一个换行符。因此,在调用函数之前,您必须使用额外的getchar读取它。