觉得本人编的没错呀

C语言 码拜 4年前 (2017-05-05) 853次浏览
1.从键盘输入一个字符串(以回车表示结束),统计其中的字母、数字和其它字符的个数。
main( )
{
char c;
int letter,digit,other;
letter=digit=other=0;
while((c=getchar())!=”\n”){
if(c>=”A”&&c<=”Z”||c>=”a”&&c<=”z”) letter++;
else if(c>=”0″&&c<=”9″) digit++;
else other++;
}
printf(“%d,%d,%d\n”,letter,digit,other);
}
[b]上面是题目和参考答案[/b]
#include <stdio.h>
main()
{
char str[50];
int i,a=0,n=0,e=0;
gets(str);
while(str[i]!=”\n”){
if(str[i]>=”A”&&str[i]<=”Z”||str[i]>=”a”&&str[i]<=”z”)
a++;
else if(str[i]>=”0″&&str[i]<=”9″)
n++;
else
e++;
}
printf(“%d,%d,%d”,a,n,e);
}
第二段代码使本人本人想的,不知道问题出在哪,运行不出来,是原因是对gets,getchar,和scnf概念的问题吗
解决方案

3

原因是你分配空间分配小了,char str[50],假如输入的是1000个字符呢?

25

#include <stdio.h>
main()
{
    char str[50];
    int i = 0;
    int a = 0, n = 0, e = 0;
    gets(str);
    while(str[i] != "\0"){
        if((str[i]>="A"&&str[i]<="Z") || (str[i]>="a"&&str[i]<="z"))
            a++;
        else if(str[i]>="0"&&str[i]<="9")
            n++;
        else
            e++;
        i++;
    }
    printf("%d,%d,%d", a, n, e);
}

问题:
1, 变量i没有初始化,默认是一个随机值很容易导致数组str越界,导致段错误;
2. i没有在循环++,循环不能继续进行,也不能计算后面的字符;
3. gets不会将回车符加到缓存str里,所以,判断”\n”是不能让循环退出的,故需要改成”\0″
建议:不要使用gets,原因是它不知道缓存大小,容易导致越界;建议使用fgets

5

1.i未赋初值,系统会给一个不确定的值。因此会造成后续一系列问题。
2.while(while(str[i]!=”\n”){……},原因是前述原因,该循环体中,i值是系统随机给的值,str[i]取的是哪个,鬼晓得?这是是无法实现你设想的目的的。由于i的值是随机的,就意味着你的程序很有可能永远都无法跳出该循环体结束运行。

5

i没有初始化,并且每次循环没有i++

2

为什么你要定义一个一维数组的char类型来统计

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明觉得本人编的没错呀
喜欢 (0)
[1034331897@qq.com]
分享 (0)