鱼C论坛

 找回密码
 立即注册
查看: 1675|回复: 6

scanf扫描无法停止输入的问题

[复制链接]
发表于 2022-4-24 10:48:36 | 显示全部楼层 |阅读模式

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

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

x
各位大佬好:
        今天在做一道将输入字符串转换大小写的题目,写完代码后发现在scanf输入阶段敲完需要输入的字符后,不管敲回车还是其他键都无法结束输入。
        代码如下,问题在就scanf那边
#include <stdio.h>

int main()
{
        char arr[20];
        int i = 0;
        char ch;

        printf("请输入需要转换的字符串:\n");
        scanf("%s",&arr);

        while (arr[i] != '\0')
        {
                ch = arr[i];
                while (65 <= ch <= 90)
                {
                        ch = ch + 32;
                        arr[i] = ch;
                }
                while (97 <= ch <= 122)
                {
                        ch = ch - 32;
                        arr[i]= ch;
                }
                i = i + 1;
        }
        printf("转换后的字符串为:%s\n", arr);

        return 0;
}

        麻烦大佬帮忙看看问题出在哪里,我已经砸了俩小时进去也没搞明白。
        本人新手中的新人麻烦下手轻点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-24 10:55:07 | 显示全部楼层
本帖最后由 jackz007 于 2022-4-24 11:02 编辑
#include <stdio.h>

int main()
{
        char arr[20]                                                 ;
        int i = 0                                                    ;

        printf("请输入需要转换的字符串:")                           ;
        scanf("%s" , arr)                                            ; // 【关键错误】arr 已经是地址,不可以写为 & arr

        while (arr[i]) {
                if(arr[i] >= 'A' && arr[i] <= 'Z') arr[i] += 32      ; //【关键错误】是 if 不是 while
                else if(arr[i] >= 'a' && arr[i] <= 'z') arr[i] -= 32 ;  //【关键错误】 是 if 不是 while
                i = i + 1                                            ;
        }
        printf("转换后的字符串为:%s\n" , arr)                       ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-24 11:06:09 | 显示全部楼层

大佬你好,代码是没问题也精简许多。但我还是没明白,为什么我自己敲的那条代码它在scanf阶段按任何键都无法结束输入,能解答一下吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-24 11:18:23 | 显示全部楼层
山小 发表于 2022-4-24 11:06
大佬你好,代码是没问题也精简许多。但我还是没明白,为什么我自己敲的那条代码它在scanf阶段按任何键都 ...

         搞清楚问题的基础和前提是已经遵守了规则,在这一点没有做到之前的讨论没有意义,scanf() 语句的问题我已经指出,你要做的是改正它,而不是在这里题问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-24 11:51:14 | 显示全部楼层
jackz007 发表于 2022-4-24 11:18
搞清楚问题的基础和前提是已经遵守了规则,在这一点没有做到之前的讨论没有意义,scanf() 语句 ...

了该
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-24 15:54:13 From FishC Mobile | 显示全部楼层
scanf的要求是你必须给变量的地址,然而你那个字符数组已经是地址了,就不用再加&了。&的功能就是取地址,&a的意思也就是变量a的地址,字符数组本身就是地址,也就不用加&了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-24 20:18:41 | 显示全部楼层
错在while(65<=ch>=90),以及while (97 <= ch<= 122) 。已更正,下面是正确答案。

#include <stdio.h>

int main()
{
        char arr[20];
        int i = 0;
        char ch;

        printf("请输入需要转换的字符串:\n");
        scanf("%s",&arr);
                //printf("%s\n",arr);
        while (arr[i] != '\0')
        {
                ch = arr[i];
                while (65 <= ch && ch <= 90)
                {
                        ch = ch + 32;
                        arr[i] = ch;
                }
                while (97 <= ch && ch<= 122)
                {
                        ch = ch - 32;
                        arr[i]= ch;
                }
                i = i + 1;
        }
        printf("转换后的字符串为:%s\n", arr);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 20:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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