scanf扫描无法停止输入的问题
各位大佬好:今天在做一道将输入字符串转换大小写的题目,写完代码后发现在scanf输入阶段敲完需要输入的字符后,不管敲回车还是其他键都无法结束输入。
代码如下,问题在就scanf那边
#include <stdio.h>
int main()
{
char arr;
int i = 0;
char ch;
printf("请输入需要转换的字符串:\n");
scanf("%s",&arr);
while (arr != '\0')
{
ch = arr;
while (65 <= ch <= 90)
{
ch = ch + 32;
arr = ch;
}
while (97 <= ch <= 122)
{
ch = ch - 32;
arr= ch;
}
i = i + 1;
}
printf("转换后的字符串为:%s\n", arr);
return 0;
}
麻烦大佬帮忙看看问题出在哪里,我已经砸了俩小时进去也没搞明白。
本人新手中的新人麻烦下手轻点。 本帖最后由 jackz007 于 2022-4-24 11:02 编辑
#include <stdio.h>
int main()
{
char arr ;
int i = 0 ;
printf("请输入需要转换的字符串:") ;
scanf("%s" , arr) ; // 【关键错误】arr 已经是地址,不可以写为 & arr
while (arr) {
if(arr >= 'A' && arr <= 'Z') arr += 32 ; //【关键错误】是 if 不是 while
else if(arr >= 'a' && arr <= 'z') arr -= 32 ;//【关键错误】 是 if 不是 while
i = i + 1 ;
}
printf("转换后的字符串为:%s\n" , arr) ;
} jackz007 发表于 2022-4-24 10:55
大佬你好,代码是没问题也精简许多。但我还是没明白,为什么我自己敲的那条代码它在scanf阶段按任何键都无法结束输入,能解答一下吗。
山小 发表于 2022-4-24 11:06
大佬你好,代码是没问题也精简许多。但我还是没明白,为什么我自己敲的那条代码它在scanf阶段按任何键都 ...
搞清楚问题的基础和前提是已经遵守了规则,在这一点没有做到之前的讨论没有意义,scanf() 语句的问题我已经指出,你要做的是改正它,而不是在这里题问。 jackz007 发表于 2022-4-24 11:18
搞清楚问题的基础和前提是已经遵守了规则,在这一点没有做到之前的讨论没有意义,scanf() 语句 ...
了该 scanf的要求是你必须给变量的地址,然而你那个字符数组已经是地址了,就不用再加&了。&的功能就是取地址,&a的意思也就是变量a的地址,字符数组本身就是地址,也就不用加&了。 错在while(65<=ch>=90),以及while (97 <= ch<= 122) 。已更正,下面是正确答案。
#include <stdio.h>
int main()
{
char arr;
int i = 0;
char ch;
printf("请输入需要转换的字符串:\n");
scanf("%s",&arr);
//printf("%s\n",arr);
while (arr != '\0')
{
ch = arr;
while (65 <= ch && ch <= 90)
{
ch = ch + 32;
arr = ch;
}
while (97 <= ch && ch<= 122)
{
ch = ch - 32;
arr= ch;
}
i = i + 1;
}
printf("转换后的字符串为:%s\n", arr);
return 0;
}
页:
[1]