带有scanf()和switch-statment的字符串中的字符数

时间:2016-02-17 13:58:02

标签: c arrays string switch-statement scanf

我想做什么

我试图计算字符串中的字符数。我尝试在数组CH[100]中保存字符串,然后启动switch-statement以查找字符Q重复多少...

代码

  

114.c

#include <stdio.h>
#define SIZE 100
int main(int argc, char* argv[])
{
    char* CH[SIZE];
    int alpha[26] = { 0 };
    unsigned int i = 0; 

    printf("name\n");
        scanf("%s", CH);
    while(i < SIZE){
        if(CH[i] != '\0')
        {   
            switch(CH[i])
            {
                case 'a':
                case 'A': ++alpha[0]; break;
                case 'b':
                case 'B': ++alpha[1]; break;
                case 'c':
                case 'C': ++alpha[1]; break;
                .           .           .   
                .           .           .
                .           .           .
                case 'y': 
                case 'Y': ++alpha[24]; break;
                case 'z': 
                case 'Z': ++alpha[25]; break;
            }//end switch
        }else{ break;}
    ++i;
    }//end while
    for(int j = 65; j < 91; ++j)
    {
        if(alpha[j- 65] != 0)
        printf("%s\t - %d times\n",(char) j,alpha[j- 65]);
    }
}

编译和执行:

[ar.lnx@host Documents] $ gcc 114.c -o x
[ar.lnx@host Documents] $ ./x
donner le nom
anas
Segmentation fault (core dumped)
[ar.lnx@host Documents] $

我无法理解问题是什么,有人可以帮我找到这里发生的事情

3 个答案:

答案 0 :(得分:1)

好吧,在%s中将%c更改为printf

待办事项

printf("%c\t - %d times\n",(char) j,alpha[j- 65]);

而不是

printf("%s\t - %d times\n",(char) j,alpha[j- 65]);

您的更正代码是

#include <stdio.h>
#define SIZE 100
int main(int argc, char* argv[])
{
    char CH[SIZE];
    int alpha[26] = { 0 };
    unsigned int i = 0; 

    printf("name\n");
        scanf("%s", CH);
    while(i < SIZE){
        if(CH[i] != '\0')
        {   
            switch(CH[i])
            {
                case 'a':
                case 'A': ++alpha[0]; break;
                case 'b':
                case 'B': ++alpha[1]; break;
                case 'c':
                case 'C': ++alpha[1]; break;
                case 'y': 
                case 'Y': ++alpha[24]; break;
                case 'z': 
                case 'Z': ++alpha[25]; break;
            }//end switch
        }else{ break;}
    ++i;
    }//end while
    int j;
    for( j = 65; j < 91; ++j)
    {
        if(alpha[j- 65] != 0)
        printf("%c\t - %d times\n",(char) j,alpha[j- 65]);
    }
}

如果您对%c%s之间的区别有疑问,请检查this

答案 1 :(得分:0)

唯一的错误是打印计数时将%s替换为%c 即改变

printf("%s\t - %d times\n",(char) j,alpha[j- 65]);

printf("%c\t - %d times\n",(char) j,alpha[j- 65]);

答案 2 :(得分:0)

问题在于您的printf格式:

printf("%s\t - %d times\n",(char) j,alpha[j- 65]);

将其更改为:

printf("%c\t - %d times\n",j,alpha[j- 65]);

char演员阵容无害但不必要。真正的问题是%s需要%c