回 帖 发 新 帖 刷新版面

主题:数字金字塔程序优化

#include "stdafx.h"
#include<iostream>
#include<math.h>
#include<ctype.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int rows;
    int i,j,k,m;
    cin>>rows;                  //输入行数
    cout<<endl;
    while(rows!=0)
    {            
    if(rows<0)                  //如果行数小于0则提示,并要求重新输入。
      {
        cout<<"Input fail,angain please."<<endl;     //输入字母则进入死循环。
        cin>>rows;
      }
     if(rows>0)
     {
         system("cls");
        for(i=1;i<=rows;i++)
        {
        m=i;
        for(k=1;k<=3*(rows-i);k++)
            cout<<" ";
        for(j=1;j<=(2*i-1);j++)
          {
            cout<<" "<<i-abs(j-i)<<" ";
          }
        cout<<endl;
        }
        cout<<"0:EXIT"<<endl<<"Any number go on"<<endl;   //输入0退出,任意数字继续
        cin>>rows;                                       //输入字母则产生严重错误,肯
     }                          //请解决办法。                            
    // getchar();
    // getchar();
     
    }
    return 0;
}
程序是写对了,但它存在几个小问题:
一、小于10行数字都可以对齐,大于10行后数字不能对齐。已经上传有图片,大家看一看就知道了
二、输入数字金字塔行数要求,输入0则退出,输入数字则重新输出一个数字金字塔。输入字母则提示 Input fail,angain please,并要求重新输入。可是输入字母时却没有达到我想要的功能。肯请各位帮忙看一下,给出解决办法。

回复列表 (共3个回复)

沙发

一、先用#include <iomanip>,然后可以设置输出的宽度。把所有的数字宽度都设置为2(宽度不足时会自动用空格补充),这样就能对齐了。

二、读取到错误输入后,先用cin.clear清除错误标记,然后用cin.ignore清除已经读入的错误字符,最后重新读取即可。

示例:
[code=c]#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int n;

    // 循环,如果输入错误,则反复输入,直到输入正确,才退出循环
    while ((!(cin >> n)) || n <= 0)
    {
        // 如果输入结束符(Ctrl+Z),则直接退出
        if (cin.eof())
        {
            return -1;
        }

        // 输入错误后有错误标志,用clear可以清除错误标志,以便下次能够顺利读取
        cin.clear();

        // 忽略已经输入的错误字符(例如:英文字母等),直到遇到换行符为止
        cin.ignore(9999, '\n');

        cout << "input error, please try again" << endl;
    }

    // 输出,注意setw(2)表示下一次输出时宽度为2,宽度不足的在左边用空格补齐,这样就造成了对齐效果
    cout << setw(2) << 1 << endl;
    cout << setw(2) << 2 << endl;
    cout << setw(2) << 5 << endl;
    cout << setw(2) << 10 << endl;

    return 0;
}[/code]

板凳

谢谢一楼的朋友,你所提出的解决办法我好好的研究一下。

3 楼

用printf很好解决的问题,整成流后如此麻烦。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册