标题:定义数组时必须初始化吗
只看楼主
小马不过河
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-7-24
结帖率:100%
已结贴  问题点数:20 回复次数:10 
定义数组时必须初始化吗
输入一行字符,分别统计出其中英文字母、空格、 数字和其它字符的个数            都是错的,求解正确的
#include <stdio.h>
int main(){
    int i,j;
    char a[];
    int num=0,num1=0,num2=0,num3=0;
    scanf("%d",&i);
    printf("输入一行字符:\n");
    for(j=0;j<i;j++){
    scanf("%c",&a[j]);
    //for(j=0;j<i;j++){
        if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='Z'))
            num++;
        else if(a[j]==' ')
            num1++;
        else if(a[j]>=0&&a[j]<=9)
            num2++;
        else
            num3++;
    }
    printf("英文字母%d个,空格%d个,数字%d个,其他字符%d个\n",num,num1,num2,num3);
return 0;}
搜索更多相关主题的帖子: 英文字母 include 统计 
2016-07-24 13:12
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:10 
虽说定义数组不一定要初始化,但是大小是要确定的。
char a[];如果 你要这样定义,就必须要初始化,初始化的大小就是数组a的大小。
2016-07-24 13:19
小马不过河
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-7-24
得分:0 
回复 楼主 小马不过河
假设数组是10
#include <stdio.h>
int main(){
    int j;
    char a[10];
    int num=0,num1=0,num2=0,num3=0;
    //scanf("%d",&i);
    printf("输入一行字符:\n");
    for(j=0;j<10;j++)
    scanf("%c",&a[j]);
    for(j=0;j<10;j++){
        if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='Z'))
            num++;
        else if(a[j]==' ')
            num1++;
        else if(a[j]>=0&&a[j]<=9)
            num2++;
        else
            num3++;
    }
        printf("英文字母%d个,空格%d个,数字%d个,其他字符%d个\n",num,num1,num2,num3);
return 0;


}输出结果是错的
2016-07-24 14:02
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:10 
回复 3楼 小马不过河
scanf()函数是不能够达到你这程序的要求的,因为它不能够存储空格
程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    int j;
    char a[10];
    int num=0,num1=0,num2=0,num3=0;
    //scanf("%d",&i);
    printf("输入一行字符:\n");
    fgets(a, 9, stdin);
    a[strlen(a)-1]='\0';
    j=0;
    while(a[j]!='\0')
    {
        if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='Z'))
            num++;
        else if(a[j]==' ')
            num1++;
        else if(a[j]>='0'&&a[j]<='9')  // 我们这里键入的毕竟是字符,所以‘’还是要有的
            num2++;
        else 
            num3++;
        j++;
    }
   
    printf("英文字母%d个,空格%d个,数字%d个,其他字符%d个\n",num,num1,num2,num3);
    return 0;
}


[此贴子已经被作者于2016-7-24 14:25编辑过]


千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 14:21
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
得分:0 
把输入部分用gets试试
2016-07-24 15:01
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
scanf想读入空格就这样写:scanf("%[^\n]",a);
2016-07-24 22:22
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 6楼 linlulu001
这样的话,没有检查机制,应该会很容易超出它的指定内存的吧。

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 22:39
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
回复 7楼 晓益
数据容易溢出和那样写没有半毛钱关系。
2016-07-24 23:27
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 8楼 linlulu001
回去我再看看。。

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 23:29
qingdaozhang
Rank: 2
等 级:论坛游民
帖 子:6
专家分:20
注 册:2017-3-19
得分:0 
#include <stdio.h>
#define X 5
int main()
{
    char a[X];
    int num=0,num1=0,num2=0,num3=0,i;
   
    for(i=0;i<X;i++)
    {
        scanf("%c",&a[i]);
    }
    for(i=0;i<X;i++){
    {   
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
            num++;
        else if(a[i]==32)
            num1++;
        else if(a[i]>=0&&a[i]<=9)
            num2++;
        else
            num3++;
    }
    }
        printf("%d%d%d%d\n",num,num1,num2,num3);
return 0;
}
2017-03-22 15:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467188-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016011 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved