не могу запустить программу в RedHat - PullRequest
4 голосов
/ 28 апреля 2011

Я написал простую программу

int main(){
              printf("hello word!");
              return 0;
}

Я скомпилировал его, используя gcc -o hello hello.c (без ошибок) но когда я запускаю его in terminal, используя ./hello, я ничего не вижу, почему? заранее спасибо

Ответы [ 6 ]

7 голосов
/ 28 апреля 2011

Может быть отсутствующим переводом строки, чтобы вывод был искажен при следующем приглашении.

Попытка:

printf("hello world\n");

эта версия также использует более обычное сообщение.

1 голос
/ 28 апреля 2011

Добавьте \ n к вашей напечатанной строке, чтобы выходной буфер был сброшен в ваш терминал.

printf("hello world!\n");

Кроме того, вы должны включить заголовок stdio, чтобы избежать неявных ссылок

#include <stdio.h>
0 голосов
/ 28 апреля 2011

Спецификация языка C гласит, что последняя строка вывода в текстовом потоке может потребовать \n в конце.В языке говорится, что это требование определяется реализацией .Это сразу означает, что в общем случае поведение программы не определено, если строка ее вывода в текстовый поток не имеет \n в конце.

Поведение становится определенным, только когда вы говорите о какой-то конкретной реализации.Некоторая реализация может произвести вывод.Другая реализация может ничего не производить.И еще одна реализация может вести себя по-другому.

Для вашей конкретной реализации (GCC в Linux) я бы ожидал увидеть вывод даже без завершающего \n.Может быть, в настройке вашей оболочки / терминала есть что-то, что делает его невидимым.

0 голосов
/ 28 апреля 2011

#include <stdio.h> отсутствует. Вы должны были получить предупреждающее сообщение вроде: warning: incompatible implicit declaration of built-in function ‘printf’. Затем в зависимости от системы вы можете получить или не получить желаемый результат.

0 голосов
/ 28 апреля 2011

включите stdio.h

#include <stdio.h>

и попробуйте сбросить стандартный вывод

fflush(stdout);

Возможно, стандартный буфер вывода не был очищен.Помните также, что если программа на C прервана, возможно, что некоторые printf были успешно вызваны, но буфер не был очищен, поэтому вы ничего не видите.Если вы хотите быть уверены, что printf был вызван правильно, то вручную сбросьте вывод.

0 голосов
/ 28 апреля 2011

Возможно, оно выводит сообщение, но затем приложение немедленно завершает работу, и вы не можете его увидеть.

После отображения сообщения вызовите функцию, которая читает следующее нажатие клавиши, чтобы предотвратить завершение приложения, пока вынажмите клавишу.

...