参考这个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
有人可以说出发生了什么吗?
答案 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--;
}
}