2010-08-16 2 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

+0

В мои 3 года. эпоху программирования, я впервые впервые тестировал авто. – user409640

+1

@ программирование-торнадо: 'auto' в C объявляет объект с автоматической продолжительностью хранения. В ansi c объекты имеют автоматическую продолжительность хранения по умолчанию. Не путайте это с помощью 'auto' в C++ 0x. – Lucas

ответ

5

Когда новая строка считывается из stdin и помещают в com, то com теперь '\n' и for(;;) петля петля навсегда, а while(com=='c') никогда не будет введен.

scanf("%c ",&com); устраняет проблему, поскольку символ пробела вызывает scanf, чтобы пропустить все пробелы.

См. MSDN article. Параметр FIrst указывает, что делает космический charcter.

Смежные вопросы