视觉中的奇怪行为

use*_*640 0 visual-c++

这个程序在第一次参数后挂起: -

#include <stdio.h>
#include <conio.h>
void ellip(char*,...);
int main(int argc,char* argv[]){
    printf("a");
    ellip("first argument",99,"second arg","thirdarg");
    _getch();
return 0;
}
void ellip(char* m,...)
{   char com='c';
    for(;;)
        {   
            auto g=0;
            while(com=='c')
            {

                printf("%d\nMatched Continue:-",g++);
                scanf("%c",&com);


            }
        }
}
Run Code Online (Sandbox Code Playgroud)

而同一程序有一个微妙的修改(增加空间)

scanf("%c ",&com);
Run Code Online (Sandbox Code Playgroud)

工作良好!

这是vc中的某种错误还是计算机中的问题?

gwe*_*ell 5

当读取stdin和放入新行时com,com现在'\n'for(;;)循环,循环将永远循环,而while(com=='c')永远不会输入.

scanf("%c ",&com);解决了这个问题,因为空格字符会导致scanf跳过所有空格.

请参阅MSDN 文章.第一个要点解释了空间正在做什么.