2010-10-10 131 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