我试图打印输出,但我的代码一直得到一个错误:
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
指定第二个索引了。
- 你用c++编译器编译C程序,这是错误的
-
BT[i - 1]
是作为左值(指针)而不是字符的字符数组。将其与整数' '
进行比较。即使在C语言中,它也会发出警告,这绝对不是你想要的。