Putchar,GetChar,循环中缺少角色
-
13-12-2019 - |
题
我对这个宁静的代码有问题,它应该将小写字母更改为大写,并将多个空格转换为一个空间。所以它做错了什么,当我写“abcdefg”时,它会削减第一个字母,就像我写“abcdefg”它在输出“bcdefg”上。
main(){
int z=0,b;
while ( (b = getchar() ) != '\n')
{
b=b-32;
if (b>0)
{
putchar(b);
}
else
{
if (z>=2)
{
putchar(b);
}
else
{
z=z+1;
printf(" ");
}
}
}
}
. 解决方案
似乎为我生成了所有的字母......你试过追踪它,找出你输入的角色的每一步都在做什么?
其他提示
空间处理有一些问题。
似乎您将在任何情况下打印一个空格(当您的getcar返回0x20时)。
您可以从中开始,以消除空间问题。 否则您有特定的有问题输入。因为我没有“第一个字母剪辑”问题。
main(){
int z=1,b;
while ( (b = getchar() ) != '\n')
{
b=b-32;
if (b>0)
{
putchar(b);
z=1;
}
else
{
if (z>=2)
{
putchar(b);
}
else
{
z=z+1;
printf(" ");
}
}
}
}
. 首先,您不应该使用像“32”这样的常量,而是让系统定义值的内容。即:b - = char('');
第二,查看函数“islower()”和“toupper()”和c将自动为您执行此操作。
考虑这样的东西:
包括
main() {
int flag = 0;
char b;
while ((b=getchar()) != '\n') {
if (flag && isspace(b))
continue;
putchar(toupper(b));
if (isspace(b)) {
flag = 1;
continue;
}
flag = 0;
}
putchar('\n');
.
}
输入:“BC DEF GHIJGHG 123 A1B2C3”
输出:“BC DEF GHIJGHG 123 A1B2C3”
注意:它看起来像文本框消除空格,因为输入线有很多空白。
您应该始终意识到您的边界条件。如果输入开始将是一堆空格,它仍将打印一个空格。为了消除所有领先的空格,初始化标志= 1.如果输入有尾随空格,它也会打印最终空间。为了消除那些需要略微不同的解决方案,在看到空间和另一个可打印字符后打印空间的那些。
不隶属于 StackOverflow