2014-09-13 120 views
-2

我正在嘗試使用ASCII表格將所有小寫字母轉換爲大寫字母!這是很容易處理,我已經找出了代碼。問題是,如果單詞之間存在空格,那麼程序只會更改第一個單詞,在空格之後它將不會打印任何內容。使用ASCII將小寫字母轉換爲大寫


詞語:安德烈亞斯給出:ANDREAS
詞語:TeSt123Ha給出:TEST123HA
BUT !!!
文字:你好45給:HELLO
沒有打印空間後!

我知道ASCII表格中的空格等於32,而在我的代碼中,我告訴程序如果當前正在閱讀的代碼不在97到122之間,那麼請不要執行任何更改!

但它仍然不工作!

char currentletter; 
int i; 

for (i=0; i<49; i++)  
{ 
    currentletter = str[i]; 

    if ((currentletter > 96) && (currentletter < 123)) 
    { 
     char newletter; 
     newletter = currentletter - 32; 
     str[i] = newletter; 
    } 
    else 
    { 
     str[i] = currentletter; 
    } 
} 
printf("%s\n", str); 
+4

你沒有表現str'如何'初始化 - 我敢打賭空間後的詞甚至沒有在那裏(是'str'用'argv [1]'初始化)?)如果你在printf(「%s \ n」,str);'*之前執行* case轉換代碼,會發生什麼? – 2014-09-13 08:18:02

+1

@MichaelBurr:好點。 'scanf(「%s」,str)'是單字輸入的另​​一個競爭者。 – 2014-09-13 08:53:25

+0

你的'else'分支不是問題的根源,但仍然是完全多餘的。 – 5gon12eder 2014-09-13 09:01:56

回答

0

你已經在你使用scanf來獲取字符串的評論中提及了。 scanf將在找到空格或換行符後停止掃描。

爲了克服此問題,使用fgets()
語法fgets()是:

char *fgets (char *str, int size, FILE* file); 

在你的情況下,使用

fgets(str,49,stdin); 

而不是使用scanf


你的代碼也有一些不相關的東西。 去除不相干的東西后,你的代碼如下:

int i; 

for (i=0; i<49; i++)  
{ 

    if ((str[i] > 96) && (str[i] < 123)) 
    str[i]=str[i]-32; 

} 
printf("%s\n", str); 
相關問題