在char数组中输入数字

时间:2015-10-19 12:57:19

标签: c++

参考这个problem我需要在程序中输入一个100位数字并对其进行操作。我想我会用一个char数组来做它。

我试了一段时间后写了这段代码。

 int main()
 {
 //int cases=10;

//while(cases--)
//{
    int i;
    char totalapples[102];
    //char klaudia_apples[200] , natalia_apples[200];

    for(i=0;totalapples[i]!='\0';i++)
    {
            cin>>totalapples[i];
    }

    //cin>>moreapples[200];
    //cout<<moreapples[200];

    while(i--)
    {
      cout<<totalapples[i];
    }
//}

    return 0;
  }

当我运行时,我得到以下结果:

Input : 1234657891234567981345698
Output : 987564321

有人可以说出发生了什么吗?

4 个答案:

答案 0 :(得分:1)

您的程序调用未定义的行为。尽管char数组包含未定义的值,但您尝试使用

从中读取
totalapples[i]!='\0'
for循环中

。而是将整个字符串读入std::string

string totalApplesStr;
cin >> totalApplesStr;

现在您可以迭代totalApplesStr

for (char c : totalApplesStr) {
     /* Do whatever you need to */
}

或者,如果这不是代码中的逻辑错误,您可以从结尾迭代到开头:

for (auto it = totalApplesStr.rbegin(); it != totalApplesStr.rend(); ++it) {
    /* Do whatever you need to */
}

答案 1 :(得分:0)

使用std::string代替char数组。

然后,您可以使用std::tranform转换为int的向量来进行大数计算。

答案 2 :(得分:0)

您尝试从尚未初始化的数组中测试值。

尽管char数组是您可以使用的最少安全方法,但您可以使用初始化程序修复它:

char totalapples[102] = {0};

此外,您的第二个循环将向后打印结果。尝试将增加到 i,而不是从 i递减

答案 3 :(得分:0)

您新的初始化您的计数器/索引。还有许多其他改进要做,但你的代码很短

#define ARRAY_SIZE 102

int main {
    char totalapples[ARRAY_SIZE];
    unsigned int i = ARRAY_SIZE;
    i = 0;
    while (i < ARRAY_SIZE)
    {
        cin>>totalapples[i]; // range is 0..101
        i++;
    }    

    i = ARRAY_SIZE;
    while (i > 0)
    {
        cout<<totalapples[i]; // range is 0..101
        i--; 
    }   
}