【问题标题】:echoing of getchar and '\n' char from stdin从标准输入回显 getchar 和 '\n' char
【发布时间】:2012-04-17 05:19:03
【问题描述】:

我已经看过这个similar question,但我仍然想知道是否有另一种方法可以停止 1) 终端与便携性相呼应,因为这是一项作业,我已经有一个 java 程序崩溃并烧毁了我的老师计算机 2)在我的程序中我搜索一个 '\n' 字符然后如果它不是第一个字符使用 getchar 然后 putchar 直到下一个 '\n' 字符在使用重定向 stdin 时工作正常但是当我尝试使用不重定向的程序总是回显回车键,这是与终端回显有关还是我需要检查除'\n'之外的不同字符?我也尝试过包含'/r' 并进行了大量谷歌搜索,但似乎回声的答案无法通过便携性完成?

#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;
}

谢谢拉克兰

【问题讨论】:

  • 你是否得到了do-while 中的回声,如果是这样转换为while((c=getchar()) != '\n')
  • 有关闭回声的多平台便携方式。对于 UNIX 和类似平台,您可能必须使用 termcap,但这不适用于 Windows。
  • 使用termios 来控制一次字符输入和回显在声称posix 兼容性的系统之间是可移植的。 termios 的使用显示在问题开头提到的stackoverflow.com/questions/1798511/…similar question 页面上的第二个答案中另外,请注意getchar() 返回int 而不是char
  • @BrianSwift;谢谢,我确实看到了,但如果它不兼容,我不想在这个阶段冒不编译的风险,但无论如何都会为了利益而尝试。
  • @UNECS 如果讲师没有提供具有相同构建工具环境的系统,用于评估您的提交,您可以在提交之前测试您的代码,我建议您配置一个系统(也许在虚拟机中)以尽可能接近地匹配讲师配置。

标签: c echo stdin getchar


【解决方案1】:

首先尝试以下内容:

1) 条件应该是if (c != '\n' &amp;&amp; c != '\r')

2) 和 while 循环,如果终端是行缓冲的,那么您最好使用来自 ncurses 库的getch,大多数平台都应该有库包。

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

【讨论】:

  • 如果我在有新行时立即使用 1,例如在带有文本的行尾,程序将退出带有 3 的行,它将跳过行尾的换行符,导致行它们之间没有正确的间距
  • 感谢我一直在寻找 getch 但只能在 c.... 中找到它。图书馆将尝试 curses
  • 感谢 ncurses 的想法,但由于我必须在未编译的情况下发送分配,如果不使用 gcc 编译器中的 -lncurses arg,它会不会工作? link
猜你喜欢
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
相关资源
最近更新 更多