Putchar,getchar,while循环中缺少字符
我对这种代码的和平性有问题,它应该把小写字母变成大写字母,把多个空格变成一个空格。所以它做错了什么,它以某种方式切断了第一个字母,就像我在输出BCDEFG上写abcdefg时它给我的一样Putchar,getchar,while循环中缺少字符,c,while-loop,getchar,putchar,C,While Loop,Getchar,Putchar,我对这种代码的和平性有问题,它应该把小写字母变成大写字母,把多个空格变成一个空格。所以它做错了什么,它以某种方式切断了第一个字母,就像我在输出BCDEFG上写abcdefg时它给我的一样 main(){ int z=0,b; while ( (b = getchar() ) != '\n') { b=b-32; if (b>0) { putchar(b
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(" ");
}
}
}
}
它似乎为我生成了所有的字母。。。您是否尝试过跟踪它,以了解它在每个步骤中使用您输入的字符执行的操作 您的空空间处理有一些问题
在任何情况下,当getchar返回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这样的常量,而是让系统定义值。IE:b-=字符“” 第二,看看islower和toupper的函数,C会自动为您实现这些功能 考虑一下这样的情况: 包括 主要 { } 输入:bc def ghijghg 123 a1b2c3 输出:BC DEF GHIJGHG 123 A1B2C3 注意:文本框似乎在消除空格,因为输入行中有很多空格
您应该始终了解边界条件。如果输入将启动一组空格,它仍将打印一个空格。要消除所有前导空格,请初始化标志=1。如果输入有尾随空格,它还将打印最后一个空格。要消除这些问题,您需要一个稍微不同的解决方案,即在看到一个空格和另一个可打印字符后打印一个空格。哇,我不知道怎么做,但现在也可以了,无论如何,谢谢。
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');