【发布时间】: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 如果讲师没有提供具有相同构建工具环境的系统,用于评估您的提交,您可以在提交之前测试您的代码,我建议您配置一个系统(也许在虚拟机中)以尽可能接近地匹配讲师配置。