2012-11-13 108 views
2

我剛纔看到這在技術上是可行的,我唯一無法解決的錯誤是每次測試時都打印出來的最後一個ASCII字符,我也測試了這個使用變量,我的意思只是做的32減法以ASCII任何小寫字母應該給我自己的大寫之一,確實如此,但爲什麼I'm得到額外字符I'm好奇,從我在屏幕上看到的很明顯是Û在沒有ctype.h的情況下轉換大小寫字母

#include <stdio.h> 
main() 
{ 
char name[22]; 
int i; 

fputs("Type your name ",stdout); 
fgets(name,22,stdin); 


for (i = 0; name[i] != '\0'; i = i + 1) 
printf("%c",(name[i])-32); /*This will convert lower case to upper */ 
          /* using as reference the ASCII table*/ 
fflush(stdin); 
getchar(); 
} 

回答

4

也許在字符串末尾有換行符。

您可以檢查chararacter代碼,這樣就只轉換實際上是小寫字母字符:

for (i = 0; name[i] != '\0'; i = i + 1) { 
    char c = name[i]; 
    if (c => 97 && c <= 122) { 
    c -= 32; 
    } 
    printf("%c", c); 
} 
+0

感謝那絕對是一個解決方案,並作爲其他替代,我記得與fgets ()在輸入完名後輸入新行,我應該在fgets()*** name [strlen(name)-1] ='\ 0'後添加下一行; ***可以在轉換時刪除我輸入的新行,並將其作爲空值。 – Yudop

+0

我知道這個問題是舊的,然而,我想強制每個人在這樣的操作中使用'unsigned char',因爲角色可能在某些平臺上出現。 – ghostmansd

-1
#include<stdio.h> 

void upper(char); 

void main() 
{ 
    char ch; 
    printf("\nEnter the character in lower case"); 
    scanf("%c", &ch); 
    upper(ch); 
} 

void upper(char c) 
{ 
    printf("\nUpper Case: %c", c-32); 
} 
相關問題