#c #linux #ubuntu #g #ubuntu-14.04
#c #linux #ubuntu #g #ubuntu-14.04
Вопрос:
Я некоторое время использовал текстовый редактор и g для компиляции и запуска программ, но по какой-то причине сегодня он перестал работать.
Он будет компилироваться без ошибок, но когда я пытаюсь запустить исполняемый файл, он ничего не делает. Нет ошибок, нет вывода. Ничего. Это код, который я пытаюсь запустить.
#include <iostream>
#include <fstream>
int main(){
// Initializes variable.
int coordinatePair;
// Creates an object to use for the file.
std::ofstream fileReader;
// Initiates a for-loop to get the value of each variable.
for(int i = 0; i == 5; i ){
std::cout << "Please enter the x-coordinate of your coordinate pair. " << std::endl << "You have " << 5 - i << " pairs left to enter." << std::endl;
std::cin >> coordinatePair;
// Opens the file.
fileReader.open("points.txt");
// Writes the user's values to the file.
fileReader << coordinatePair << std::endl;
// Closes the file.
fileReader.close();
}
}
В терминале я создал каталог для расположения файла…
cd ~/file location
А затем я его скомпилировал.
g points_out.cpp -o points_out
И я попытался его запустить.
./points_out
И ничего не происходит. Нет сообщений об ошибках, нет вывода, ничего. Хотя код не совсем эффективен (мне, вероятно, лучше открывать и закрывать файл вне цикла for.), он все равно должен выполняться. Я попытался ввести неверный код, чтобы посмотреть, что произойдет, и он выдал мне правильные коды ошибок. Я также пытался
g -W -Werror points_out.cpp
… и это также не дало мне никаких кодов ошибок. Я попытался создать новый каталог для другого .cpp-файла, который я скомпилировал и запустил ранее на этой неделе, и он работал просто отлично. По какой-то причине этот файл просто не запускается. И я уверен, что он компилируется, потому что исполняемый файл создается. Я также уверен, что он не запущен, потому что текстовый файл не создается.
Я получил эту вещь для успешной компиляции и запуска один раз, и при этом был создан текстовый файл. Это первый раз, когда я столкнулся с проблемами с g . Я повсюду искал решение, но большинство людей, у которых была эта проблема, просто не выполняли
./points_out
часть или возникли проблемы с MinGW или необходимо удалить Avast. Ни одна из этих проблем у меня не возникает, поэтому я в недоумении.
Кроме того, не уверен, поможет ли это, но запуск
g --version
выдает мне следующий вывод:
g (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Комментарии:
1. Проверьте условие в вашем цикле for .
2. Еще один совет по отладке: разбросайте
printf()
вызовы отладки повсюду. Например, aputs("hello world");
в началеmain()
даст вам знать, что программа запущена.3. Подсказка: при первом прохождении цикла i == 5?
4. И, пожалуйста, опишите в своем вопросе, что вы подразумеваете под «ничего (не происходит)». Завершается ли программа и возвращает приглашение ИЛИ вам нужно нажать Ctrl-C, чтобы завершить работу программы и вернуться к командной строке ИЛИ??? Хороший Q в противном случае, удачи.
5. Я идиот. Спасибо всем, и я сожалею и очень смущен.
Ответ №1:
Поведение является нормальным для программы, которая ничего не делает и успешно завершается.
C for-loop оценивает условие цикла перед вводом тела цикла. Когда тело цикла завершено, вычисляется необязательное выражение после цикла, и программа возвращается к условной проверке.
Итак, ваш код присваивает значение 0
i
, а затем проверяет, i == 5
прежде чем разрешить ввод в цикл.
Не совсем понятно, что вы имели в виду, но вы, вероятно, не имеете в виду
for (int i = 0; i < 5; i )
Мы можем быстро продемонстрировать это с помощью этого фрагмента кода:
#include <iostream>
int main() {
std::cout << "original loop:n";
for (int i = 0; i == 5; i )
std::cout << i << 'n';
std::cout << "corrected loop:n";
for (int i = 0; i < 5; i )
std::cout << i << 'n';
}
Живая демонстрация: http://ideone.com/O0Ul2z
— Добавление —
Большинство программистов подумали бы добавить что-то вроде без излишеств, без условий
std::cout << "hello worldn";
в верхней части их программы, чтобы убедиться, что она не запущена или не работает.
Комментарии:
1. Да, я идиот. Спасибо. Я тоже знаю лучше, так что это унизительно. Я буду винить в этом стресс и недостаток сна. Спасибо!
2. В дополнение я сделал это, хотя и добавил его в конец, поэтому, я думаю, именно поэтому это не сработало. Как я уже сказал, недостаток сна.