题解 | #大小写转换#

大小写转换

https://www.nowcoder.com/practice/4e089ee8966a4ed4b306f64e68d45264

#include <stdio.h>

int main() 
{
    while (1)
    {
        int a = getchar();
        if (a != EOF)
        {
            while (getchar() != '\n');
            printf("%c\n",a+32);
        }
        else 
        {
            break;
        }
    }

    return 0;
}

/*
没看题解 看了才发现 自己写的代码 多么离谱 
代码和代码之间也有云泥之别 还是继续努力吧

最开始的想法: getchar()获取字符的ASCII值 
打印时 根据ASCII表的规律 大写加上32是小写字母
还得利用 while(getchar()!=0); 来清除缓冲区 
然而仅仅如此 只能打印一个字母 
于是又想着while循环 这样可以输入多值 
到此为止 以为自己想的差不多了哈哈哈

结果就因为简单的逻辑 搞了我很久都在报错 

1.一开始没写循环 写了两次输入 中间清除了缓冲区
结果它只输入一个字母 导致后面读空 
给我输出了个框 暂时不知道具体是为什么 
是空+32得到的吗 我去vs试试 
我去vs试了一下 按两下回车才结束 
然后读的是第二次的回车 +32后变成*了
 不知道为什么一开始牛客 输出的是个框 

2.尝试写循环了 但是逻辑关系对我这来说
真的有点绕哈哈哈  我一开始先判断EOF 
IF里面在给a赋值。结果是输出*
因为我把int a = getchar();放在了if内 
int a = getchar(); 应该放在 if 语句之外,
放在里面的话if (getchar() != EOF) 调用了一次 getchar()
但是没有存储返回的字符。
紧接着 int a = getchar(); 又调用了一次
实际上应该使用第一次调用的结果。

即第一个 getchar() 调用的结果是被丢弃的,
而第二个 getchar() 调用实际上读取了下一个字符。
这意味着第一个字符被忽略了
此时程序只会处理从第二个字符开始的输入。
这样会导致什么呢?哈哈哈就是*吗

总结错误在于:

if (getchar() != EOF) 这行代码读取了第一个字符,但没有存储,直接用于EOF检查。
int a = getchar(); 这行代码实际上读取了第二个字符,并将其存储在变量 a 中。
while (getchar() != '\n'); 这个循环会读取并丢弃从当前位置到换行符的所有字符
这意味着 会读取 从第一个字符到\n 之间的第二个字符 

所以正确思路大概是:

1.首先读取字符
2.然后检查是否为EOF。
3.如果不是EOF,检查字符是否为大写字母,如果是,则转换为小写字母。
4.输出当前字符。
5.重复上述步骤直到读取到EOF。

反过来想 这错的思路也能用来读第二个字符吗 是不是
如果出个题 让我读第二个字符我会怎么做呢?
其实还是不推荐的 应该有更好的思路 
(原本错误的思路是 if (getchar() != EOF) 读取并丢弃了一个字符。
然后 int a = getchar(); 读取了第二个字符。)

试试?

int main()
{   while(1)
    {
        int firstChar,a;
        firstChar = getchar();// 读取第一个字符,但不使用它
        if (firstChar != EOF) // 检查是否到达文件结束
        {
            a = getchar();// 读取第二个字符
            while (getchar() != '\n');//清除缓冲区
            if (a >= 'A' && a <= 'Z') // 处理第二个字符
            {
                a = a + 32; // 转换为小写
            }
            printf("%c\n", a);//打印
        }
        else
            break;
    }
	return 0;
}

挺麻烦的 这段代码问题还是比较多的 因为工作原因也只能先到这了 后面有时间再来吧
*/

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务