我有一个学科编程,我的学校老师教得不好。他给了我们一个任务,其中程序应该根据用户输入忽略数组的第一个和最后一个元素。我的代码在第一次尝试时有效,但如果我再次开始运行程序,它会打印出最后一个数字。我知道我的时间变量和第二个 for 循环的条件是叠印的根本原因,有什么办法可以修复它或对我的代码进行一些修改。谢谢你的帮助。
如果用户输入最大大小为 3 的数字 3,程序应输出:4 5
如果我再次运行程序并输入相同的值,程序将打印:4 5 4 5 6 这是错误的..
#include<iostream>
using namespace std;
int main ()
{
int Max[100],num,Values[100];
int rear=0,total,input=0;
char choice;
do {
system("cls");
cout<<"\n Enter the number : ";
cin>>num;
cout<<"\n Enter the Max Size: ";
cin>>Max[rear];
total = Max[rear] - 2;
for(int i = 0; i<rear; i++)
{
total += Max[rear];
}
for(int i=input; i<=total; i++)
{
Values[i]= ++num;
input++;
}
cout<<"\n\n Output: ";
for(int i=0; i<=total; i++)
{
cout<<" "<<Values[i];
}
rear++;
cout<<"\n\n Run the Program Again Y/N ? ";
cin>>choice;
}while (choice=='Y' || choice=='y');
return 0;
}
这里有两件事在起作用,它们似乎都是您的第一个 for 循环的结果。
for(int i = 0; i<rear; i++)
{
total += Max[rear];
}
首先要注意的是,只有在当前循环中分配的 'Max[rear]' 的值是复合的。如果每个条目的长度相同,这可以正常工作,但如果每个条目不同,则效果不佳。所以这..
total += Max[rear];
变成这个..
total += Max[i];
伟大的!但是似乎仍然发生了叠印问题?
这个问题只是一个off-by-one 错误,因为你的 for 循环倾向于使用 <= 和非零起点;这没有什么错,但它可能会出现难以捕捉的错误!
当您开始在第一个 for 循环中将“Max”数组中的条目复合到“total”变量上时,它们会将变量增加一个比他们需要的多;所以简单地改变我们之前讨论过的同一行...
total += Max[i];
至..
total += Max[i] - 1;
删除该偏移量,似乎很好地解决了您的叠印问题。
输入数字:3
输入最大尺寸:3
输出:4 5 4 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句