2015-12-07 120 views
0

我再次發現自己相對迷失方向,並從同伴那裏尋求知識。 我需要做的是編寫一個程序,該程序採用編碼語言,在添加輔音後輸入英語,然後添加字母'u''t'。所以輸入的Hutelutluto會作爲你好輸出。起初我以爲我已經想通了,但後來我的教授說我必須將初始輸入存儲在字符數組中並顯示出來。然後使用該字符數組輸出修改後的翻譯。改變字符數組的輸出

我嘗試了幾個不同的角度,一個試圖修改我的readstring函數來適應我的修改參數。它總是變得混亂,給我意想不到的結果。

本質上我相信我需要喂字符數組到while循環的幫助,但是當我嘗試時我得到一個錯誤,指出我有一個指針與整數錯誤的比較。

這是我的代碼,我相信我是最接近解決問題的代碼。目前,while函數獨立於讀取字符串函數。我確信我正在解決問題,但我不知道如何解決這個問題。 :

/* 

Tut language 
By: Steven 

*/ 

# include <stdio.h> 
void readstring(char *, int); 

int main (void){ 
    char input [50]; 
    char output; 
    char trash; 

//initiation 
printf("\n\t*Hi! Welcome to the assemble of Tut*\n"); 
printf("I can help you decode/encode a message to and from the code called Tut!\n"); 
printf("Enter a sentence to be translated frome Tut - English: "); 
readstring(input, 50); 
printf("Your Tut sencence is: %s \n",input); 








    while (output != '\n') { 
    output = getchar(); 
    if(output == '\n'){//escape sequence 
     break; 
    } 
     if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){ 
     putchar(output); 
     trash = getchar(); 
     trash = getchar(); 
     }else{ 
     putchar(output); 
     } 
    } 
    return 0; 
}// end main 

//function lists start 
void readstring(char * buffer, int size) { 
    int x; 
    char c = getchar(); 

    if(c == '\n') { 
    c = getchar(); 
    } 

    for(x = 0 ; (x < (size-1)) && c != '\n' ; x++) { 
    buffer[x] = c; 
    c = getchar(); 
    } 

    buffer[x] = '\0'; 
} 

任何幫助或反饋將不勝感激! 感謝您的時間!

p.s.

在考慮了我的建議後,我編輯了我的代碼,但好像它忽略了第一個之後的所有輸入。我什至嘗試改變!='\ n'條件只是我< 50,但我得到了同樣的結果。

的代碼行採取Tim的意見後:

for (i = 0; input [i] != '\n'; ++i){ 
    output = input[i]; 
     if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){ 
     putchar(output); 
     trash = getchar(); 
     trash = getchar(); 
     }else{ 
     putchar(output); 
     } 
    } 
+0

所以我想,我的問題是與垃圾= getchar();宣言。如果輸入的字符不是元音,我最初使用它來避開接下來的兩個字符輸入。但看到我必須將最初的信息存儲在一個字符數組中,我不知道我將如何跳過這兩個字符? – scubasteve7

回答

0

的主要問題是在你的while循環。在這個循環中,你正在使用getchar,它嘗試從標準輸入讀取。但是,您已經讀取了輸入,並將其存儲在緩衝區中。

所以,你應該從緩衝區中取出你的字符,而不是再讀一遍。

+0

我確實提到,目前這兩個鍋獨立,即時需要弄清楚如何結合他們的兩個公用事業本質。 – scubasteve7

0

您的readstring函數已經調用getchar來讀取用戶終端中的字符,所以在readstring完成後,您不需要再次調用它。相反,使用for循環設置output來依次輸入字符串的每一個字符:

int i; 
for i = 0; input[i] != '\n'; ++i { 
    output = input[i] 
    if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){ 
     ... 
+0

好吧,這是有道理的,它幾乎是我所期待的,但是,有什麼原因爲什麼for循環在第一個字母h過早停止? 例如這裏是我的控制檯輸出: *嗨!歡迎來到Tut * 的組裝我可以幫助您解碼/編碼來自代碼Tut的消息! 輸入需要翻譯的句子frome Tut - 英語:hutelutluto 您的Tut sencence是:hutelutluto h – scubasteve7

+0

我不知道爲什麼循環過早終止。仔細查看它是否在錯誤的時間調用break,或者由於某種原因忽略超出第一個字符的字符,或者在不應該改變輸入或i變量時。 –

+0

它忽略了第一個字符後的所有字符。我相信這是因爲我如何用trash = getchar();拋出接下來的兩個字符輸入。我怎麼會繞過這個問題,而不使用垃圾= getchar();我發佈了上面的算法,看看你是否可以發現任何東西。 – scubasteve7

0

...字符數組中,我不知道我會如何跳過 那接下來的兩個字符?

您可以通過增加數組索引來跳過字符。更改

 trash = getchar(); 
     trash = getchar(); 

 input[++i] && input[++i] || --i; // step back if at end of string 

此外,由於輸入字符串由\0而不是\n終止,變更

for (i = 0; input [i] != '\n'; ++i){ 

for (i = 0; input[i]; ++i) 
    {