Не удается прочитать выходные данные программы

#c

#c

Вопрос:

Итак, сегодня я изучаю C и столкнулся с небольшой проблемой, которую, похоже, не могу решить. Когда я пишу программу для ввода информации от пользователя, программа закрывается сразу после ввода пользователем информации и не отображает введенную информацию.

Итак, например, вот код:

 #include <iostream>
#include <string>

using namespace std;

int main() {
    //Declar vairables
    char letter = 'A';
    int integer = 0;
    float dec = 0.0f;

    cout << "Enter a letter: ";
    cin >> letter;

    cout << "Enter an integer: ";
    cin >> integer;

    cout << "Enter a float number: ";
    cin >> dec;

    cout << endl;

    //Output what user entered
    cout << "letter: " << letter << endl;
    cout << "integer: " << integer << endl;
    cout << "float number: " << dec << endl;
}
  

Теперь, когда я запускаю это, консоль просит меня:

  1. Введите букву
  2. Введите целое число
  3. Введите число с плавающей точкой

Однако после этого программа мгновенно закрывается, не отображая выходные данные, которые должен выполнять этот сегмент кода:

 //Output what user entered
cout << "letter: " << letter << endl;
cout << "integer: " << integer << endl;
cout << "float number: " << dec << endl; }
  

Это заставляет меня почесать голову, поскольку ошибок при компиляции нет, а код взят прямо из C Programming for Games издательством eInstitute Publishing.

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

1. В какой среде вы работаете? Что вы имеете в виду под «мгновенным закрытием программы»?

2. Как только ваша проблема будет решена, вы можете выбрать один из ответов как «Принятый», это обеспечит вам репутацию, а также побудит других помочь вам в последующих вопросах.

Ответ №1:

Ваша программа завершается. Поскольку командная строка была открыта при выполнении вашего процесса, она закрывается при завершении вашего процесса. Вы можете добавить вызов cin в конце основной функции, чтобы приостановить работу до нажатия клавиши enter, что-то вроде:

 cout << "Press any key to close the program";
char c;
cin >> c;
  

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

1. Вы также можете использовать cin.ignore() .

Ответ №2:

Это то, что обычно происходит, когда вы запускаете свою программу в режиме отладки. Ваша программа выполняет окончательные запросы и печатает их, после чего немедленно переходит к инструкции return 0;. Вы должны запросить ввод в качестве заключительного действия, чтобы предотвратить немедленное закрытие программы.

Чтобы избежать этого, вы можете добавить это в конце вашей программы:

 char c;
std::cin>>c;
  

Это имитирует паузу.

Если вы используете Windows, вы также можете вызвать system («ПАУЗА»); хотя это не является кроссплатформенным.

Ответ №3:

Вероятно, вы запускаете его непосредственно из своей IDE, вот почему это происходит. В конце вашей программы есть другая инструкция ввода, это заставит программу приостановиться, и вы увидите экран.

Ответ №4:

Я мог бы лучше определить проблему, если бы был написан соответствующий код, но я думаю, проблема в том, что вы пытаетесь скомпилировать с помощью Visual studio и привязываетесь к отладке вашего проекта (вы нажимаете f5), я думаю, если вы нажмете ctrl f5, эта проблема будет решена (это заставит вашу программу запускаться без отладки, а также заставит ее ждать ключа, пока программа не будет завершена), другой способ — добавить еще один cin в конце вашей программы, чтобы вы могли видеть, что было написано до закрытия консоли.

Ответ №5:

Хм, похоже, это наконец становится немного старомодным — в Windows, в Linux это, безусловно, все еще довольно популярно, и я бы определенно рекомендовал это: пока у ваших программ нет графического интерфейса, запускайте их из постоянно открытого окна терминала! Это имеет несколько преимуществ, одним из которых является возможность считывать выходные данные программы после ее завершения.

Ответ №6:

Хм, попробуй вставить

 #include<stdlib.h>
  

в ваших директивах и

 System.("Pause");
  

в самом конце вашей программы. Он сразу закрывается просто потому, что либо произошел сбой, что приводит к появлению окна «отправить ошибку», либо оно просто завершилось, и программа завершена. Хотя Эд прав, другой cin вызов также сделал бы свое дело.

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

1. system("pause") к сожалению, не является кроссплатформенным, поэтому я не упомянул об этом, поскольку OP не сообщает нам, на какой платформе он находится.

Ответ №7:

Дело в том, что после вывода ваших строк на консоль все, что делает приложение, — это завершает работу. Вы можете отменить это, поместив дополнительную строку команды под остальной частью вашего кода, например:

 int main() {
    // ...your code
    char buffer[100];
    cin>>buffer;
}
  

Другой, лучший способ сделать это — использовать system API и вызвать pause (если вы используете это в Windows). Взгляните сюда, чтобы узнать больше об API.

 #include <stdio.h>
#include <stdlib.h>
// your includes, NO DUPLICATES!

int main() {
    // ...your code
    system("pause");
}