让我说我当然有一个无效功能和主要功能。
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个字符。好吧,我把x
和c
放在一起就是它从交换机调用另一个不正确的函数,因为我不想再运行另一个函数。我需要对那些函数做些什么第一个功能中有2个字符。它是混合输入。我怎么解决这个问题?只有当功能100%完成其工作时,我才需要切换。我的程序中有几个函数,所有函数都无效。建议?
答案 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
,而输入流中保留c
。 function()
退出。
break;
中的main
执行并突破switch
。 while
循环开始下一次迭代。执行到达
switch(c = getchar())
和getchar()
会看到前一个c
遗留的scanf
并使用它并将其存储在c
中。 someOtherFunc();
被称为。{/ p>
看到故障? \n
角色破坏了一切。作为@BLUEPIXY has already explained how to solve the problem,请在%c
的第一个scanf
之前使用空格,或在调用getchar()
之前使用function()
和someOtherFunc()
来解决问题。如果你现在想知道空间是做什么的,那么再次阅读我的答案。我已经指定了%c
中scanf
之间的空格。至于getchar()
,它会使用getchar()
语句中switch
留下的换行符。