2012-04-17 2 views
1

Я уже посмотрел на это similar question, но мне все еще интересно, есть ли другой способ остановить 1) терминал, эхом с портабельностью, поскольку это назначение, и у меня уже есть одна авария с программой java и сжигание на моем компьютере учителей 2) в моей программе я ищу символ '\n', то если это не первый символ, используйте getchar, а затем putchar до следующего '\n' char, который отлично работает при использовании перенаправленного stdin, но когда я пытаюсь используя программу без перенаправления, клавиша ввода всегда эхом, это связано с эхо-вызовом терминала или мне нужно проверить различный символ, кроме '\n'? Я также пробовал включить '/r' и сделал много поискового запроса, но, похоже, ответ на эхо не может быть выполнен с помощью портативности?echoing getchar и ' n' char от stdin

#include <stdio.h> 
#include <string.h> 

int first_line(char); 
int main(){ 

char c; 

while((c = getchar())!=EOF){ 
    first_line(c); 
} 

return 0; 
} 

int first_line(char c){ 
if (c != '\n'||c != '\r'){ 
    putchar(c); 

    do{ 
     c = getchar(); 
     putchar(c);} 
    while(c !='\n'); 
} 

return 0; 
} 

Благодаря Лаклан

+0

вы получите эхо в 'Do-while' если так преобразовать в' в то время как ((с = GetChar())! = '\ П') ' – keety

+0

Существует мультиплатформенный портативный способ превращения off echo. Для UNIX и подобных платформ вам, вероятно, придется использовать termcap, но это не будет работать для Windows. –

+0

Использование 'termios' для управления вводом и повторным вводом символов по времени переносится между системами, которые утверждают совместимость' posix'. Использование termios показано во втором ответе на странице «похожих вопросов», упомянутой в начале вашего вопроса, по адресу http://stackoverflow.com/questions/1798511/how-to-avoid-press-enter-with-any- getchar Также обратите внимание: 'getchar()' возвращает 'int' не' char'. –

ответ

1

Для начала попробовать со следующим:

1) условие должно быть if (c != '\n' && c != '\r')

2) и цикл в то время как, в случае, если терминал буферном линии то вам лучше использовать getch из библиотеки ncurses, библиотечные пакеты должны быть там для большинства платформ.

while((c =getchar())!='\n') { 
     putchar(c); 
    } 
+0

Если я использую 1, как только появится новая строка, например, в конце строки с текстом программа выйдет из нее с 3, она пропустит новую строку в конце строки, в результате чего линии не будут иметь правильного интервала между ними – UNECS

+0

@UNECS отредактировал ответ – keety

+0

спасибо, что я искал getch, но мог найти его только в c ... Библиотека будет пытаться проклинать – UNECS