void main c语言编程中下标值既不是数组也不是指针也不是向量
subscripted value is neither array nor pointer nor vector in the void main c language programming
我想在大数之间进行加法运算,但出现错误。我正在使用一个字符数组。第55行有错误。[错误]下标值既不是数组也不是指针也不是向量
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
int chrtoint(char a){
int i;
for (i = 48; i<=57; i++)
if (toascii(i)==a) return i-48;
return 0;
}
void main(){
char n1[80];
char n2[80];
printf("Enter First Number:");
scanf("%s", &n1);
printf("\nEnter Second Number:");
scanf("%s", &n2);
sumNumber(n1 , n2);
}
void sumNumber(char n1 , char n2){
int rs[80];
int c1, c2;
int i,j,m, cmax, sum;
c1 = strlen(n1);
c2 = strlen(n2);
strrev(n1);
strrev(n2);
cmax = c1;
if(c1<c2){
cmax = c2;
}
m=0;
for(i=0; i< cmax; i++){
if(c1==c2 || (i < c1 && i < c2)){
sum = m+chrtoint(n1[i])+chrtoint(n2[i]); // error is given in this line
}else if(i >=c1){
sum = m+chrtoint(n2[i]);
}else if(i >=c2){
sum = m+chrtoint(n1[i]);
}
rs[i] = sum%10;
m = sum/10;
}
if(m){
rs[i]=m;
i++;
}
printf("\nResult: ");
for(j=0; j < i; j++){
printf("%d", rs[i-j-1]);
}
}
如果我问了同样的问题,我深表歉意。这是我第一次在此站点上发布问题。有什么不对的请告诉我。
您的编译器应该显示几条警告和错误消息。
首先,将原型添加到函数 void sumNumber(char n1, char n2)
或将其移到 main
上方。说到这一点,你的 main
函数原型不是很好的做法(在某些编译器中它是非法的);它应该是 int main(void)
或 int main(int argc, char *argv[])
.
这里:
void sumNumber(char n1, char n2)
这些变量在您的主函数中声明为字符数组,因此 sumNumber
的参数应该是字符数组:
void sumNumber(char n1[], char n2[])
或指向字符的指针:
void sumNumber(char *n1, char *n2)
还有一件事,在这些行中:
scanf("%s", &n1);
scanf("%s", &n2);
您传递的指针指向一个 80 个字符的数组,这是无效的;应该是
scanf("%s", n1);
scanf("%s", n2);
更正这些错误,您的程序应该 运行 没问题。
当我们定义 char 数组用作字符串时(我们不使用地址扫描它)
因为大多数编程语言中的 String 已经是
被视为地址(参考指针)
1-)我知道c里面没有String。
这就是为什么我说(当我们定义 char 数组“用作字符串”时)
2-) 根据 String 不是引用的观点。所有编程语言中的字符串都是非原始数据类型,这意味着它的变量可以被认为是一个对象。
正如我们所知,对象始终是一个引用
我想在大数之间进行加法运算,但出现错误。我正在使用一个字符数组。第55行有错误。[错误]下标值既不是数组也不是指针也不是向量
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
int chrtoint(char a){
int i;
for (i = 48; i<=57; i++)
if (toascii(i)==a) return i-48;
return 0;
}
void main(){
char n1[80];
char n2[80];
printf("Enter First Number:");
scanf("%s", &n1);
printf("\nEnter Second Number:");
scanf("%s", &n2);
sumNumber(n1 , n2);
}
void sumNumber(char n1 , char n2){
int rs[80];
int c1, c2;
int i,j,m, cmax, sum;
c1 = strlen(n1);
c2 = strlen(n2);
strrev(n1);
strrev(n2);
cmax = c1;
if(c1<c2){
cmax = c2;
}
m=0;
for(i=0; i< cmax; i++){
if(c1==c2 || (i < c1 && i < c2)){
sum = m+chrtoint(n1[i])+chrtoint(n2[i]); // error is given in this line
}else if(i >=c1){
sum = m+chrtoint(n2[i]);
}else if(i >=c2){
sum = m+chrtoint(n1[i]);
}
rs[i] = sum%10;
m = sum/10;
}
if(m){
rs[i]=m;
i++;
}
printf("\nResult: ");
for(j=0; j < i; j++){
printf("%d", rs[i-j-1]);
}
}
如果我问了同样的问题,我深表歉意。这是我第一次在此站点上发布问题。有什么不对的请告诉我。
您的编译器应该显示几条警告和错误消息。
首先,将原型添加到函数 void sumNumber(char n1, char n2)
或将其移到 main
上方。说到这一点,你的 main
函数原型不是很好的做法(在某些编译器中它是非法的);它应该是 int main(void)
或 int main(int argc, char *argv[])
.
这里:
void sumNumber(char n1, char n2)
这些变量在您的主函数中声明为字符数组,因此 sumNumber
的参数应该是字符数组:
void sumNumber(char n1[], char n2[])
或指向字符的指针:
void sumNumber(char *n1, char *n2)
还有一件事,在这些行中:
scanf("%s", &n1);
scanf("%s", &n2);
您传递的指针指向一个 80 个字符的数组,这是无效的;应该是
scanf("%s", n1);
scanf("%s", n2);
更正这些错误,您的程序应该 运行 没问题。
当我们定义 char 数组用作字符串时(我们不使用地址扫描它) 因为大多数编程语言中的 String 已经是 被视为地址(参考指针)
1-)我知道c里面没有String。 这就是为什么我说(当我们定义 char 数组“用作字符串”时)
2-) 根据 String 不是引用的观点。所有编程语言中的字符串都是非原始数据类型,这意味着它的变量可以被认为是一个对象。
正如我们所知,对象始终是一个引用