C 下标值、数组、指针或向量
这是我的程序,将二进制值转换成十进制值C 下标值、数组、指针或向量,c,C,这是我的程序,将二进制值转换成十进制值 #include <stdio.h> #include <string.h> #include <math.h> void con(){ unsigned long long int dec = 0, bin; int i; printf ("\n Binary : "); scanf("%lld",&bin); for (i = strlen(bin) - 1
#include <stdio.h>
#include <string.h>
#include <math.h>
void con(){
unsigned long long int dec = 0, bin;
int i;
printf ("\n Binary : ");
scanf("%lld",&bin);
for (i = strlen(bin) - 1; i <= 0; --i){ // Warning in here
dec = dec + (bin[i] * pow (2, i)); // Error in here
}
printf(" Decimal : %lld",dec);
con();
}
int main(){
con();
return 0;
}
#包括
#包括
#包括
void con(){
无符号长整型dec=0,bin;
int i;
printf(“\n二进制:”);
scanf(“%lld”、&bin);
对于(i=strlen(bin)-1;i
在这一行中,您试图使用无符号long-long类型的变量作为数组。每种数值类型都作为一个完整值,您不能使用数组索引来访问单独的数字。如果要将其用作数组,请使用char*或character数组
您还将向strlen(const char*str)函数传递一个无符号long long
在这一行中,您试图使用无符号long-long类型的变量作为数组。每种数值类型都作为一个完整值,您不能使用数组索引来访问单独的数字。如果要将其用作数组,请使用char*或character数组
您还向strlen(const char*str)函数传递了一个无符号的long long函数。您的代码有很多问题
最重要的是变量bin
。您可能希望它是一个类似“1001”的字符串,但将其定义为无符号长整型
。相反,您应该执行以下操作:
char bin[100];
scanf("%s", bin); // Note: Not recommended! Use fgets instead.
此处不建议使用scanf
,因为用户可能会使缓冲区溢出。请改用fgets
正如@MayurK所建议的那样:如果你想使用scanf
,那么至少要:
scanf("%99s", bin);
防止缓冲区溢出
那么这部分,
dec = dec + (bin[i] * pow (2, i));
是错误的,因为bin[i]不是一个数字,而是一个字符
你可以做:
dec = 2 * dec + (bin[i] - '0'); // Note: No error checks which is bad
只要用户只输入0
和1
,它就可以工作。在实际代码中,您应该检查用户是否确实这样做了
最后,您不应该在函数末尾调用con
,因为它将产生一个无休止的循环。因此,请删除该调用:
printf(" Decimal : %lld",dec);
// DELETE THIS con();
}
您的代码有许多问题
最重要的是变量bin
。您可能希望它是一个类似“1001”的字符串,但将其定义为无符号长整型
。相反,您应该执行以下操作:
char bin[100];
scanf("%s", bin); // Note: Not recommended! Use fgets instead.
此处不建议使用scanf
,因为用户可能会使缓冲区溢出。请改用fgets
正如@MayurK所建议的那样:如果你想使用scanf
,那么至少要:
scanf("%99s", bin);
防止缓冲区溢出
那么这部分,
dec = dec + (bin[i] * pow (2, i));
是错误的,因为bin[i]不是一个数字,而是一个字符
你可以做:
dec = 2 * dec + (bin[i] - '0'); // Note: No error checks which is bad
只要用户只输入0
和1
,它就可以工作。在实际代码中,您应该检查用户是否确实这样做了
最后,您不应该在函数末尾调用con
,因为它将产生一个无休止的循环。因此,请删除该调用:
printf(" Decimal : %lld",dec);
// DELETE THIS con();
}
bin
是unsigned long long int
,不是指针或数组…@StoryTeller所以我应该将它用作数组?如果你想将它用作数组,你应该将它声明为数组…bin
是unsigned long long int
,不是指针或数组…@StoryTeller所以我应该将它用作数组?你应该声明它作为一个数组,如果你想将它作为一个数组使用…更好的扫描(“%99s”,bin);@MayurK-谢谢-很好的观点。有一刻我忘记了这种可能性,因为我总是使用fgets
来代替。回答更新为你的建议。更好的扫描(“%99s”,bin).@MayurK-谢谢-说得好。有一刻我忘记了这种可能性,因为我总是用fgets
来代替。请根据您的建议更新答案。