【问题标题】:char to int conversion error in cc中的char到int转换错误
【发布时间】:2014-01-21 18:38:01
【问题描述】:

我给出一个 1000 位数字作为输入,并使用这个程序找到 5 个连续整数的最大乘积。数组 a 用于保存具有最高乘积的序列。我得到了一个意想不到的答案(我怀疑问题出在从 char 到 int 的转换中)

#include <stdio.h>
int main(void) 
    {
    int a[5],c=0,b,i=1;
    char *num[1000];
    scanf("%s",&num);
    while(i<5)
    {
        a[i]=num[i]-'0';
        i++;
    }
    while(i<1000)
    {
        b=(char)num[i]-'0';
        if(a[c]<b)
        {
            a[c]=b;
            c=(c+1)%5;
        }i++;
    }
    printf("%d",a[0]*a[1]*a[2]*a[3]*a[4]);
    return 0;
}

【问题讨论】:

  • 除了固定类型外,如果要存储1000个字符,则需要为末尾的终止null分配额外的内存,因此num至少为1001。

标签: c arithmetic-expressions


【解决方案1】:

您分配和读取字符串的代码是错误的。您正在分配一个包含 1000 个指针的数组。你的意思是写:

char num[1000];
scanf("%s", num);

您的代码的其余部分也充满了错误。您打算将 i 初始化为 0。并且您需要在第二个循环之前将其设置回 0。第二个循环运行到 1000,因此访问 num 的未初始化元素。

【讨论】:

  • 感谢指正,我确实打算在第二次循环之前将i的值保持为5
  • 我向你保证不是。第二个循环读取未初始化的值。
  • 不仅如此。您从 num[i] 读取未初始化的元素
猜你喜欢
  • 2010-10-21
  • 2013-06-09
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多