忽略数组中的第一个和最后一个数字

时间:2018-03-31 05:08:49

标签: c++ arrays

我有一个学科编程,我的学校老师没有教我们好。他给了我们一个任务,在程序中应根据用户输入忽略数组的第一个和最后一个元素。我的代码在第一次尝试时工作,但如果我再次开始运行该程序,它会输出最后一个数字。我知道我的 time 变量和第二个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; 
}

1 个答案:

答案 0 :(得分:0)

这里有两件事情,它们似乎都是你的第一个循环的结果。

for(int i = 0; i<rear; i++)
{      
    total += Max[rear];
}

首先要注意的是,只有&#39; Max [后]&#39;在当前循环中分配的是复合的。如果每个条目的长度相同,则此方法可以正常工作,但如果每个条目不同,则不会这样。所以这个......

   total += Max[rear];

成为这个..

   total += Max[i];

大!但似乎仍然存在套印问题?

这个问题只是一个 off-by-one error ,这是因为你的for循环倾向于使用&lt; =和非零起点;这没有什么不对,但它很难抓错!

当您开始复合“&#39; Max&#39;排在&#39;总计&#39;在你的第一个for循环中变量,它们将变量增加了一个多于他们需要的变量;所以简单地改变我们之前讨论过的同一行......

    total += Max[i];

要..

    total += Max[i] - 1;

删除了这个偏移,似乎很好地解决了套印问题。

  

输入数字:3

     

输入最大尺寸:3

     

输出:4 5 4 5