鱼C论坛

 找回密码
 立即注册
查看: 1042|回复: 7

[已解决]c语言while语句和do...while语句01

[复制链接]
发表于 2023-12-27 14:52:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 liyifeng295641 于 2024-1-3 15:54 编辑

这是小甲鱼的题,我写哪里有问题。@FishC
0. 统计从键盘输入的一行英文句子中大写字母的个数。

                               
登录/注册后可看大图
#include <stdio.h>

int main(){
        int count = 0;

        printf("请输入一行英文句子:");

        while(getchar() != '\n'){
                if(getchar() >= 'A' && 'Z' <= getchar()){
                        count++;
                }
        }
        printf("你总共输入了%d个大写字母!", count);
}
最佳答案
2023-12-27 14:52:56
你的代码只有一点小问题,就是在判断大写字母时有错误。在代码中,你调用了两次getchar()函数,但是每次调用都会读取一个字符,导致第二次调用与第一次的结果不同。为了解决这个问题,你可以将第一次调用的结果存储在一个变量中,然后在判断语句中使用这个变量。下面是修改后的代码:
#include <stdio.h>int main(){        int count = 0;        char ch;        printf("请输入一行英文句子:");        while((ch = getchar()) != '\n'){                if(ch >= 'A' && ch <= 'Z'){    // 修改这里的判断条件                        count++;                }        }        printf("大写字母的个数为:%d\n", count);        return 0;}
现在,当你输入一行英文句子后,程序将会统计出其中大写字母的个数并输出。希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-27 14:52:56 | 显示全部楼层    本楼为最佳答案   
你的代码只有一点小问题,就是在判断大写字母时有错误。在代码中,你调用了两次getchar()函数,但是每次调用都会读取一个字符,导致第二次调用与第一次的结果不同。为了解决这个问题,你可以将第一次调用的结果存储在一个变量中,然后在判断语句中使用这个变量。下面是修改后的代码:
#include <stdio.h>int main(){        int count = 0;        char ch;        printf("请输入一行英文句子:");        while((ch = getchar()) != '\n'){                if(ch >= 'A' && ch <= 'Z'){    // 修改这里的判断条件                        count++;                }        }        printf("大写字母的个数为:%d\n", count);        return 0;}
现在,当你输入一行英文句子后,程序将会统计出其中大写字母的个数并输出。希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-27 14:56:04 | 显示全部楼层
FishC 发表于 2023-12-27 14:52
你的代码只有一点小问题,就是在判断大写字母时有错误。在代码中,你调用了两次getchar()函数,但是每次调 ...

你的意思是说getchar()函数,只能调用一次。我这使用了两次,从而需要一个变量ch把它第两次存起来使用,对吗?@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-27 14:56:17 | 显示全部楼层
liyifeng295641 发表于 2023-12-27 14:56
你的意思是说getchar()函数,只能调用一次。我这使用 ...

没错!getchar()函数只能读取一个字符,如果你需要使用两次输入的字符,就需要将第二次读取的字符存储在一个变量中。可以定义一个变量,比如叫做ch,使用第一次getchar()函数读取一个字符并将其赋值给ch,然后再使用第二次getchar()函数读取下一个字符。这样,你就可以使用这两个字符了。下面是一个简单的示例代码:
#include <stdio.h>int main() {    char ch1, ch2;    printf("请输入第一个字符:");    ch1 = getchar();    // 读取第一个字符    getchar();    // 消耗掉输入缓冲区中的回车符    printf("请输入第二个字符:");    ch2 = getchar();    // 读取第二个字符    printf("第一个字符:%c\n", ch1);    printf("第二个字符:%c\n", ch2);    return 0;}
注意,在读取第一个字符后,我们调用了一次getchar()函数来消耗掉输入缓冲区中的回车符。这是因为在输入完第一个字符后按下回车键,回车键会被getchar()读取为一个字符,并留在输入缓冲区中。所以我们需要消耗掉这个回车符,才能继续读取下一个字符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-27 15:45:38 | 显示全部楼层
FishC 发表于 2023-12-27 14:56
没错!getchar()函数只能读取一个字符,如果你需要使用两次输入的字符,就需要将第二次读取的字符存储在 ...

1. 写一个程序,将用户输入的英文句子中的字母大小写进行调换(即大写字母转换为小写字母,小写字母转换为大写字母)。
我的代码如下:
#include <stdio.h>

int main(){
        char ch;
        printf("请输入一行英文句子:");

        while((ch == getchar()) != '\n'){
                if(ch >= 'A' && ch <= 'Z'){
                        ch = ch + 32;
                        putchar(ch);
                }else if(ch >= 'a' && ch <= 'z'){
                        ch = ch - 32;
                        putchar(ch);
                }
        }
        return 0;
}
帮我改进代码!@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-27 15:45:51 | 显示全部楼层
liyifeng295641 发表于 2023-12-27 15:45
1. 写一个程序,将用户输入的英文句子中的字母大小写 ...

你的代码有几个小问题。首先,你在while循环条件中使用了一个等号(==)而不是赋值操作符(=)。应该将ch的获取与'\n'的比较放在一对圆括号中,像这样:while((ch = getchar()) != '\n')。其次,在判断小写字母的条件中,你使用了赋值操作符(=)而不是相等操作符(==),应该使用相等操作符,像这样:ch == 'a'。最后,你只是判断了大写字母和小写字母而没有进行相应的转换操作。下面是修改后的代码示例:

#include <stdio.h>

int main() {
    char ch;
    printf("请输入一行英文句子:");
    while ((ch = getchar()) != '\n') {
        if (ch >= 'A' && ch <= 'Z') {
            ch += 32; // 大写字母转换为小写字母
        } else if (ch >= 'a' && ch <= 'z') {
            ch -= 32; // 小写字母转换为大写字母
        }
        putchar(ch);
    }
   
    return 0;
}

这个程序会根据用户输入的英文句子,将其中的大写字母转换为小写字母,将小写字母转换为大写字母,并输出转换后的结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-27 19:11:04 | 显示全部楼层
FishC 发表于 2023-12-27 15:45
你的代码有几个小问题。首先,你在while循环条件中使用了一个等号(==)而不是赋值操作符(=)。应该将ch ...
#include <stdio.h>

int main()
{
        int ch;
        int num = 0;

        printf("请输入待转换的字符串:");

        do
        {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        num = 10 * num + (ch - '0');
                }
                else
                {
                        if (num)
                        {
                                break; // 如果已有数字,则退出循环
                        }
                }

        }
        while (ch != '\n');

        printf("结果是:%d\n", num);

        return 0;
}
可以给我解释一下第16行代码吗?@FshiC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-27 19:11:15 | 显示全部楼层
liyifeng295641 发表于 2023-12-27 19:11
#include

int main()
{
        int ch;
      ...

你的代码看起来很接近正确了,只有一个小问题。在进行大小写转换时,你使用的是字母的ASCII码值相差32来实现转换,这是正确的。但是在判断条件中,你将大写字母判断为小于等于90,小写字母判断为大于等于97。这样一来,如果用户输入的字符不是字母,那么判断可能会出错。应该使用大于等于65和小于等于122来判断是否是字母。下面是修改后的代码示例:
#include <stdio.h>int main() {    int ch;    int num = 0;    printf("请输入待转换的字符串:");    do {        ch = getchar();        if (ch >= '0' && ch <= '9') {            putchar(ch);  // 数字不进行转换,直接输出        } else if (ch >= 'A' && ch <= 'Z') {            putchar(ch + 32);  // 大写字母转换为小写字母        } else if (ch >= 'a' && ch <= 'z') {            putchar(ch - 32);  // 小写字母转换为大写字母        } else {            putchar(ch);  // 其他字符不进行转换,直接输出        }    } while (ch != '\n');    return 0;}
这样就可以正确地进行大小写转换了。注意,当输入回车符时,程序会结束。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表