liyifeng295641 发表于 2023-12-27 14:52:47

c语言while语句和do...while语句01

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

这是小甲鱼的题,我写哪里有问题。@FishC
0. 统计从键盘输入的一行英文句子中大写字母的个数。
https://xxx.ilovefishc.com/forum/201602/13/171228gssrpey525vpri5u.png
#include <stdio.h>

int main(){
        int count = 0;

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

        while(getchar() != '\n'){
                if(getchar() >= 'A' && 'Z' <= getchar()){
                        count++;
                }
        }
        printf("你总共输入了%d个大写字母!", count);
}

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2023-12-27 14:56:04

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

你的意思是说getchar()函数,只能调用一次。我这使用了两次,从而需要一个变量ch把它第两次存起来使用,对吗?@FishC

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 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

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 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

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: c语言while语句和do...while语句01