2014-09-13 82 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); 
相关问题