我想做的是
我在数字符串中的字符数。我试图在数组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] $我不明白是什么问题,有人能帮我找出这里发生了什么吗?
发布于 2016-02-17 14:15:54
那么,在您的%s中将%c更改为%c。
做
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之间的区别有疑问,请检查这。
发布于 2016-02-17 14:15:17
唯一的错误是在打印计数时用%c替换%c,即更改
printf("%s\t - %d times\n",(char) j,alpha[j- 65]);至
printf("%c\t - %d times\n",(char) j,alpha[j- 65]);发布于 2016-02-17 14:16:49
问题在于您的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。
https://stackoverflow.com/questions/35458701
复制相似问题