【发布时间】:2014-05-02 17:15:41
【问题描述】:
当我遇到这个障碍时,我正在准备我的计算机科学实践考试。 下面的 C 代码是将取自用户的字符串中的所有单词大写。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char a[20];
int i;
printf("Enter a string: ");
scanf("%[^\n]s",a);
if(islower(a[0])!=0)
{
a[0]=toupper(a[0]);
}
for(i=0;i<strlen(a);i++)
if(a[i]==' ' && isalpha(a[i+1]!=0))
a[i+1]=toupper(a[i+1]);
printf("%s\n",a);
return 0;
}
但是上面的代码并没有执行任务。它接受输入,但给出相同的输出(输入的字符串,原样)。此外,没有显示错误或警告。我正在使用 gcc 在 Ubuntu 14.04 中编码。我似乎不明白为什么代码不起作用。
【问题讨论】:
-
学习使用调试器(本例中为 gdb)
-
由于
toupper将在没有大写等价的情况下返回传入的值,因此此代码可以相当简单。如果您希望扩展 ascii 也能正常工作,您应该考虑在对toupper的调用中转换为unsigned char。并且请不要更改发布的代码以响应给出的答案。您刚刚所做的更改,if(islower(a[0])!=0)只是让 Pat 的答案在现在发布的代码上下文中毫无意义。