C 计算字符串中的字符

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=

此代码的目的是计算输入字符串中使用输入字符的次数

代码是这样的,它给出假输出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=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;

}