2010-10-10 132 views
4

输出应该是这样的:如何在C中编写回声程序?

Enter Character : a 
Echo : a 

我写

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

,但我得到两个回波后回车输入。

+0

你想仅回显一个字符或整个行吗?回声程序虽然回声整个行。 http://en.wikipedia.org/wiki/Echo_%28command%29 – Arun 2010-10-10 18:20:20

+1

@ArunSaha:我怀疑OP是否意味着'echo'命令。 'echo'打印它的参数,而不是标准输入。 – schot 2010-10-10 19:26:38

回答

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 2010-10-10 18:11:31

+0

@codaddict - 你说得对。我只是复制了OP的代码。我会解决它。 – Starkey 2010-10-10 18:13:46

+5

如果用户在按Enter键前输入两个字符会怎么样? – 2010-10-10 18:15:12

2

家庭作业?

如果是这样,我不会给出完整的答案/您可能有缓冲输入 - 用户在任何事情交还给您的程序之前需要输入回报。您需要了解如何关闭此功能。

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

0

为什么不用scanf代替?

例子:

char str[50]; 

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

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

return 0; 

输出

  
Enter input: xx 
Echo : xx 

scanf reference

+0

'scanf'的确是正则表达式? – leppie 2010-10-10 18:34:07

+0

您还应该将scanf输入限制为49个字符,否则可能会导致缓冲区溢出。 – 2010-10-10 18:35:17

1

采取与fgets如:

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

,你不要有任何问题与GET char/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(); 
} 
+0

尽管此代码可能会回答这个问题,但提供关于此代码为何和/或如何回答问题的其他上下文可提高其长期价值。 – 2017-06-11 10:44:14