Почему cin приводит к зависанию этой программы?

#c #cin

#c #cin

Вопрос:

Я опубликовал соответствующий код ниже. Когда я компилирую программу, она запускается и достигает точки, где она ожидает ввода. Я ввожу целое число и нажимаю ENTER, но код никогда не продолжается. Как бы мне это исправить?

 int i;
cout << "Please input column to sort by: ";
cin >> i;
  

Комментарии:

1. Я не вижу ничего плохого в этом коде (при условии, что вы случайно не используете cin и cout , отличные от тех, что в std . Какой код находится непосредственно перед и после этого фрагмента?

2. Это вся программа? Если нет, пробовали ли вы код отдельно с тем же компилятором? Если это работает, значит, что-то другое заставляет вашу cin зависать.

3. Покажите код, который следует за этим. Предпочтительно полный компилируемый пример, который выполняет нежелательное поведение.

4. если это весь код, который вы написали, проблем быть не должно, не могли бы вы, пожалуйста, предоставить еще немного кода? я имею в виду, что вы делаете после cin?

5. Какой компилятор / IDE / OS вы используете? И как вы распознаете, что «код никогда не продолжается»?

Ответ №1:

Ну, во-первых, то, что вы опубликовали выше, не будет компилироваться. Попробуйте это вместо:

 #include <iostream>

int main(int argc, char *argv[]) {
    int i;

    std::cout << "Please input column to sort by: ";
    std::cin >> i;
    std::cout << "You entered: " << i << "n";

    return 0;
}
  

Скомпилируйте ее с помощью g -O3 thefile.cpp , предполагая, что файл вызывается «thefile.cpp «.

Если это не работает, то возникает серьезная проблема. Если это произойдет, вы сможете дополнительно диагностировать вашу проблему.

Комментарии:

1. В конечном итоге это стало проблемой компилятора. Я переустановил ее, и она волшебным образом работает.

Ответ №2:

Если вы используете Visual Studio 2010, попробуйте это:

 #include<iostream>
using namespace std;

int main(){
  int i;
  cout<<"Please input column to sort by: ";
  cin>>i;
  cout<<"Your input the number: "<<i<<"nn";

  system("pause");
 return 0;
}