如何在C语言中编写一个回声程序?

4
输出应该类似于这样:
Enter Character : a
Echo : a

我写了

int c;
  while (c != EOF)
    {
      printf("\n Enter input: ");
      c = getchar();
      putchar(c);
    }

但是我在输出之后得到了两个回车符。

你想要回显一个字符还是整行?不过echo程序会回显整行。http://en.wikipedia.org/wiki/Echo_%28command%29 - Arun
1
@ArunSaha:我怀疑OP所要的并不是echo命令。echo只能打印其参数,而无法处理标准输入。 - schot
5个回答

3

输入时会获取两个字符,需要丢弃回车符。

int c = 0; 
int cr;
  while (c != EOF) 
    { 
      printf("\n Enter input: "); 
      c = getchar(); 
      cr = getchar();  /* Read and discard the carriage return */
      putchar(c); 
    } 

3
你的 c 没有被初始化,它可能会一开始就具有 EOF 的值。 - codaddict
@codaddict - 你说得对。我只是复制了原帖的代码。我会修复它的。 - Starkey
7
如果用户在按回车键之前输入了两个字符,该怎么办? - The Archetypal Paul

2

作业?

如果是的话,我不会给出完整的答案。你可能有缓冲输入 - 用户需要在程序返回任何内容之前输入回车键。你需要找到如何关闭它。

(这取决于你的程序环境 - 如果你能提供更多平台和运行程序的细节,我们可以给出更好的答案)


1

例如使用fgets:

char c[2];
if( fgets( c, 2, stdin ) )
  putchar( *c );
else
  puts("EOF");

而且你不会遇到任何有关 getchar/scanf(%c)/'\n'等的问题。


0
#include <stdio.h>
#include <conio.h>

main(){
    int number;
    char delimiter;
    printf("enter a line of positive integers\n");
    scanf("%d%c", &number, &delimiter);
    while(delimiter!='\n'){
        printf("%d", number);
        scanf("%d%c", &number, &delimiter);
    }
    printf("\n");
    getch();
}

虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - Donald Duck

0

为什么不使用scanf呢?

示例:

char str[50];

printf("\n Enter input: ");
scanf("%[^\n]+", str);

printf(" Echo : %s", str);

return 0;

输出

 
 Enter input: xx
 Echo : xx

scanf 参考手册


你还应该限制scanf输入的字符数为49个,否则可能会出现缓冲区溢出的风险。 - Matteo Italia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接