首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个字符串中的字符数,其中包含scanf()和开关状态

一个字符串中的字符数,其中包含scanf()和开关状态
EN

Stack Overflow用户
提问于 2016-02-17 13:58:01
回答 3查看 102关注 0票数 0

我想做的是

我在数字符串中的字符数。我试图在数组CH[100]中保存一个字符串,然后启动一个switch-statement来查找Q字符重复了多少次.

“守则”

114.c

代码语言:javascript
复制
#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]);
    }
}

汇编和执行:

代码语言:javascript
复制
[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] $

我不明白是什么问题,有人能帮我找出这里发生了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-17 14:15:54

那么,在您的%s中将%c更改为%c

代码语言:javascript
复制
printf("%c\t - %d times\n",(char) j,alpha[j- 65]);

而不是

代码语言:javascript
复制
printf("%s\t - %d times\n",(char) j,alpha[j- 65]);

您的更正代码是

代码语言:javascript
复制
#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之间的区别有疑问,请检查

票数 1
EN

Stack Overflow用户

发布于 2016-02-17 14:15:17

唯一的错误是在打印计数时用%c替换%c,即更改

代码语言:javascript
复制
printf("%s\t - %d times\n",(char) j,alpha[j- 65]);

代码语言:javascript
复制
printf("%c\t - %d times\n",(char) j,alpha[j- 65]);
票数 0
EN

Stack Overflow用户

发布于 2016-02-17 14:16:49

问题在于您的printf格式:

代码语言:javascript
复制
printf("%s\t - %d times\n",(char) j,alpha[j- 65]);

将其更改为:

代码语言:javascript
复制
printf("%c\t - %d times\n",j,alpha[j- 65]);

char强制转换是无害的,但没有必要。真正的问题是%s,它需要是%c

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35458701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档