C 计算字符串中的字符
此代码的目的是计算输入字符串中使用输入字符的次数 代码是这样的,它给出假输出K=41,由于数据类型范围有限,警告比较总是假的。C 计算字符串中的字符,c,comparison,C,Comparison,此代码的目的是计算输入字符串中使用输入字符的次数 代码是这样的,它给出假输出K=41,由于数据类型范围有限,警告比较总是假的。 int main() { int i,k,x=0; char ch; char str[1000]; printf("Write your Word!\n"); gets(str); printf("Write character to Search\n"); scanf("%c",&ch); x=
int main()
{
int i,k,x=0;
char ch;
char str[1000];
printf("Write your Word!\n");
gets(str);
printf("Write character to Search\n");
scanf("%c",&ch);
x=strlen(str);
printf("%d",x);
printf("%d",k);
for(i=0;i!=x-1;i++){
if(str[i]=='ch'){
k++; }
}
printf("%d times used",k);
getch();
return 0;
}
一些问题:您没有初始化
k
,比较应该是变量ch
,而不是常量'ch'
。这应该行得通(注意,我还更改了printf
s以获得更清晰的输出):
k
未初始化比较警告是因为str[i]==“ch”
str[i]
是一个字符,您将其与2个字符进行比较。您所说的不初始化是什么意思?我应该在哪里启动if循环中的k?在声明中初始化k
:inti,k=0,x=0
@AlterMann像u说的那样初始化了k,但它仍然给出了0。为什么?'ch'
不是字符串(那将是“ch”
);它是一个多字符int
常量。完美地说,gets()
不应该存在。改用fgets()
并没有什么坏处gets()
很旧,很臭,不应该使用。它甚至被从C11中删除。好的,非常感谢你,半个小时都找不到。@FilipeGonçalves我对写gets()臭气熏天有什么不同?@user1944312因为它不知道你的缓冲区大小,所以它可能会溢出。换句话说,如果用户输入的数据超过了缓冲区所能容纳的数据量,get()
将很高兴地写入超过限制的数据fgets()
接收缓冲区的大小,因此如果没有剩余空间,它将停止。在您的代码中,只需将get(str)
替换为fgets(str,sizeof str,stdin)
。这是一项重大改进。
int main()
{
int i,k=0,x=0;
char ch;
char str[1000];
printf("Write your Word!\n");
gets(str);
printf("Write character to Search\n");
scanf("%c",&ch);
x=strlen(str);
printf("strlen = %d\n",x);
for(i=0;i!=x-1;i++){
if(str[i]==ch){
k++; }
}
printf("%d times used\n",k);
getch();
return 0;
}