鱼C论坛

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

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

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

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

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

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

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

                               
登录/注册后可看大图

  1. #include <stdio.h>

  2. int main(){
  3.         int count = 0;

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

  5.         while(getchar() != '\n'){
  6.                 if(getchar() >= 'A' && 'Z' <= getchar()){
  7.                         count++;
  8.                 }
  9.         }
  10.         printf("你总共输入了%d个大写字母!", count);
  11. }
复制代码
最佳答案
2023-12-27 14:52:56
你的代码只有一点小问题,就是在判断大写字母时有错误。在代码中,你调用了两次getchar()函数,但是每次调用都会读取一个字符,导致第二次调用与第一次的结果不同。为了解决这个问题,你可以将第一次调用的结果存储在一个变量中,然后在判断语句中使用这个变量。下面是修改后的代码:
  1. #include <stdio.h>
  2. int main(){
  3.         int count = 0;
  4.         char ch;
  5.         printf("请输入一行英文句子:");
  6.         while((ch = getchar()) != '\n'){
  7.                 if(ch >= 'A' && ch <= 'Z'){    // 修改这里的判断条件
  8.                         count++;
  9.                 }
  10.         }
  11.         printf("大写字母的个数为:%d\n", count);
  12.         return 0;
  13. }
复制代码

现在,当你输入一行英文句子后,程序将会统计出其中大写字母的个数并输出。希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

现在,当你输入一行英文句子后,程序将会统计出其中大写字母的个数并输出。希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你的意思是说getchar()函数,只能调用一次。我这使用了两次,从而需要一个变量ch把它第两次存起来使用,对吗?@FishC
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

没错!getchar()函数只能读取一个字符,如果你需要使用两次输入的字符,就需要将第二次读取的字符存储在一个变量中。可以定义一个变量,比如叫做ch,使用第一次getchar()函数读取一个字符并将其赋值给ch,然后再使用第二次getchar()函数读取下一个字符。这样,你就可以使用这两个字符了。下面是一个简单的示例代码:
  1. #include <stdio.h>
  2. int main() {
  3.     char ch1, ch2;
  4.     printf("请输入第一个字符:");
  5.     ch1 = getchar();    // 读取第一个字符
  6.     getchar();    // 消耗掉输入缓冲区中的回车符
  7.     printf("请输入第二个字符:");
  8.     ch2 = getchar();    // 读取第二个字符
  9.     printf("第一个字符:%c\n", ch1);
  10.     printf("第二个字符:%c\n", ch2);
  11.     return 0;
  12. }
复制代码

注意,在读取第一个字符后,我们调用了一次getchar()函数来消耗掉输入缓冲区中的回车符。这是因为在输入完第一个字符后按下回车键,回车键会被getchar()读取为一个字符,并留在输入缓冲区中。所以我们需要消耗掉这个回车符,才能继续读取下一个字符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

  5.         while((ch == getchar()) != '\n'){
  6.                 if(ch >= 'A' && ch <= 'Z'){
  7.                         ch = ch + 32;
  8.                         putchar(ch);
  9.                 }else if(ch >= 'a' && ch <= 'z'){
  10.                         ch = ch - 32;
  11.                         putchar(ch);
  12.                 }
  13.         }
  14.         return 0;
  15. }
复制代码

帮我改进代码!@FishC
小甲鱼最新课程 -> https://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 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int main()
  3. {
  4.         int ch;
  5.         int num = 0;

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

  7.         do
  8.         {
  9.                 ch = getchar();

  10.                 if (ch >= '0' && ch <= '9')
  11.                 {
  12.                         num = 10 * num + (ch - '0');
  13.                 }
  14.                 else
  15.                 {
  16.                         if (num)
  17.                         {
  18.                                 break; // 如果已有数字,则退出循环
  19.                         }
  20.                 }

  21.         }
  22.         while (ch != '\n');

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

  24.         return 0;
  25. }
复制代码

可以给我解释一下第16行代码吗?@FshiC
小甲鱼最新课程 -> https://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来判断是否是字母。下面是修改后的代码示例:
  1. #include <stdio.h>
  2. int main() {
  3.     int ch;
  4.     int num = 0;
  5.     printf("请输入待转换的字符串:");
  6.     do {
  7.         ch = getchar();
  8.         if (ch >= '0' && ch <= '9') {
  9.             putchar(ch);  // 数字不进行转换,直接输出
  10.         } else if (ch >= 'A' && ch <= 'Z') {
  11.             putchar(ch + 32);  // 大写字母转换为小写字母
  12.         } else if (ch >= 'a' && ch <= 'z') {
  13.             putchar(ch - 32);  // 小写字母转换为大写字母
  14.         } else {
  15.             putchar(ch);  // 其他字符不进行转换,直接输出
  16.         }
  17.     } while (ch != '\n');
  18.     return 0;
  19. }
复制代码

这样就可以正确地进行大小写转换了。注意,当输入回车符时,程序会结束。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 11:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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