c++编译错误:ISO c++禁止指针与整型比较:else if



我试图打印输出,但我的代码一直得到一个错误:

c++编译错误:ISO c++禁止指针和整数的比较

错误在else if:

#include <stdio.h>
#include <string.h>
int main (){
    char BT [5][100];
    for (int i = 1; i<=2; i++){
        printf("nInsert book title:");
        scanf("%[^n]", &BT[i]);
        getchar ();
    }
    printf("nOur Collections :n"); 
    
    for (int i = 1; i<= 2 ; i++){   
        for (int i = 0; i< strlen(BT[i]); i++){
            int k;
            if ( i == 0 && BT[i][k] != ' ') {
                printf("Shelf code : %cn", BT[i][k]);
            }
            else if ( i > 0 && BT[i - 1] == ' ') {
                printf("Shelf code : %cn", BT[i][k]);
            }
        }
    }
    return 0;
}

有很多错误。

例如,C中的索引从0开始,但你使用的是For循环,索引从1开始,如

for (int i = 1; i<=2; i++){

及以下的代码,您正在尝试访问BT[0]

或者用于读取字符串的scanf函数期望使用char *类型的参数,但您传递的是char ( * )[100]类型的参数。

scanf("%[^n]", &BT[i]);

至少你应该写

scanf("%99[^n]", BT[i]);
另一个问题是使用未初始化的变量k来访问数组 的元素。
        int k;
    if ( i == 0 && BT[i][k] != ' ') {

此外,由于元素BT[0]没有值,当i等于0时,if语句中的条件将调用未定义行为以及未初始化的变量k

在嵌套循环

中使用相同的标识符i也是一个坏主意
for (int i = 1; i<= 2 ; i++){   
for (int i = 0; i< strlen(BT[i]); i++){

你的意思是

for (int i = 1; i<= 2 ; i++){   
for (int k = 0; k< strlen(BT[i]); k++){

if语句

else if ( i > 0 && BT[i - 1] == ' ') {

表达式BT[i-1]的类型是char *。因此,您正在尝试将类型char的值与类型char *的值进行比较。您忘记为数组BT指定第二个索引了。

  1. 你用c++编译器编译C程序,这是错误的
  2. BT[i - 1]是作为左值(指针)而不是字符的字符数组。将其与整数' '进行比较。即使在C语言中,它也会发出警告,这绝对不是你想要的。

最新更新