#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;
}
Теперь, когда я запускаю это, консоль просит меня:
- Введите букву
- Введите целое число
- Введите число с плавающей точкой
Однако после этого программа мгновенно закрывается, не отображая выходные данные, которые должен выполнять этот сегмент кода:
//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");
}