2010-08-16 66 views
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); 


      } 
     } 
} 

而同樣的程序有一個微妙的修改(附加的空間)

scanf("%c ",&com); 

工作正常!

這是vc中的某種錯誤還是我電腦中的問題?

+0

不是你的問題的解決方案,但你爲什麼使用'auto g = 0;'?鍵入'int g = 0;'需要少於1個字符。 – Praetorian 2010-08-16 15:39:45

+0

在我的3年。編程時代,我第一次只是測試汽車。 – user409640 2010-08-16 15:53:39

+1

@ programming-tornado:C中的'auto'聲明一個自動存儲持續時間的對象。在ansi c中,對象默認具有自動存儲持續時間。不要將它與C++ 0x中的'auto'混淆。 – Lucas 2010-08-16 15:59:06

回答

5

當新線從stdin讀出並放入com,然後com現在是'\n'永遠而while(com=='c')永遠不會進入for(;;)循環將循環。

scanf("%c ",&com);解決了該問題,因爲空格字符將導致scanf跳過所有空格。

查看MSDN article。第一個項目符號解釋了空間焦點所做的事情。