Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 下标值、数组、指针或向量_C - Fatal编程技术网

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
来代替。请根据您的建议更新答案。