这个程序是我bool变量的使用有什么问题吗?

题目:

img

代码:

#include
#include
#include 
bool digitCount(char * num);
int main(){
    int a;
    char * num;
    scanf("num = ""%c""",num);
    a = digitCount(* num);
    if(a == 1)
        printf("true\n");
    else if(a ==0)
        printf("flase\n");
    return 0;
}
#include
bool digitCount(char * num){
    int m=0,i,n,j;
    n = strlen(num);
    int s[n];
    for(i=0;ifor(j=0;jif(num[j]==i)
                m++;
        }
        s[i]=m;
    }
    if(strcmp(s,num)==0)
        return 1;
    if(strcmp(s,num)!=0)
        return 0;
}


Output:

img

bool型的取值是true和false

你的程序存在问题:
1.在读取num字符串时,scanf("num = ""%c""",num);的语法有误,应该是scanf("%s",num);
2.在定义s数组时,没有清零。
3.在循环中m没有清零。
4.if(num[j]==i)这句话语法有误,num[j]是字符,i是数字,应该改成if(num[j]=='i')或if(num[j]-'0'==i)

strcmp(s,num) 比较的是数字数组s 和字符串num ,应该比较的是s[i]和num[i]
代码返回值应该是bool类型
纠正后代码:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool digitCount(char * num);
int main(){
char * num;
scanf("%s",num);
bool a = digitCount(num);
if(a == 1)
printf("true\n");
else if(a ==0)
printf("flase\n");
return 0;
}
bool digitCount(char * num){
int i,j,n;
n = strlen(num);
int s[10] = {0};
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(num[j]-'0'==i)
s[i]++;
}
}
for(i=0;i<n;i++){
if(s[num[i]-'0']!=num[i]-'0'){
return false;
}
}
return true;
}

请注意,这是一个示例代码。如果你有其他需求或有其他问题需要解决,请在提问时更详细地描述你的需求或问题。如果有需要,还需要对这段代码进行更多测试和优化。

改成这样:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool digitCount(char * num);

int main(){
    
    char num[100];
    scanf("num=%s",num);

    printf("input data is %s \n",num);
    
    bool a = digitCount(num);
    if(a == 1)
        printf("result: true\n");
    else if(a ==0)
        printf("result: flase\n");
    return 0;

}

bool digitCount(char * num){
    int i,n,j;
    n = strlen(num);
    cout<<"data length= "<<n<<endl;
    
    char s[n];
    for(i=0;i<n;i++){
        int m=0;
        for(j=0;j<n;j++){
            if(num[j]==(char)('0'+i))
            {
                m++;
            }
        }
        
        s[i]=(char)('0'+m);
        cout<<s[i]<<"=="<<num[i]<<" ?"<<endl;
    }

    if(strncmp(s,num,n)==0)
        return true;
    if(strncmp(s,num,n)!=0)
        return false;

    return true;
}

img

img