c++ - 如何使用循环清理此代码?

标签 c++ loops visual-c++

基本上,这个程序允许用户输入一个句子,根据用户的选择,它会显示句子的中间字符,显示大写或小写,或向后显示。简单的程序,但我是编程新手,所以这可能是问题所在。我想弄清楚如何使用循环而不是大量的 if 语句。当我尝试进行一些循环时,它会破坏代码的某些部分,但我确信那是因为我没有正确理解它们。如果您对代码有任何批评或建议,我很乐意听到。提前致谢!

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;


int main()
{
int sel;
string sent;
bool validinput;
int i;
int x;
int j;
int a;

cout << "Welcome to my program. Enter a sentence and select one of the options below.\n";
cout << "Enter -999 to exit the program." << endl;
cout << "============================================================================" << endl;
cout << endl;
cout << "1. Display the middle character if there is one." << endl;
cout << "2. Convert to uppercase." << endl;
cout << "3. Convert to lowercase." << endl;
cout << "4. Display backwards." << endl;
cout << "Enter a sentence: ";
    getline (cin, sent);
cout << "Selection: ";
    cin >> sel;

    if (sel < 1 && sel > 4)
    {
        cout << "Invalid input. Try again. Selection: ";
        cin >> sel;
        validinput = false;
    }
    else (sel >= 1 && sel <= 4);
    {
        validinput = true;
    }

    if (validinput == true)
    {
        if (sel == 1)
        {
            j = sent.length() / 2;
            cout << "The middle character is: " << sent.at(j) << endl;
        }

        if (sel == 2)
        {
            for (int i = 0; i < sent.length(); i++)
            {
                if (sent.at(i) >= 'a' && sent.at(i) <= 'z')
                {
                    sent.at(i) = sent.at(i) - 'a' + 'A';
                }
            }
            cout << "Uppercase: " << sent << endl;
        }

        if (sel == 3)
        {
            for (int x = 0; x < sent.length(); x++)
            {
                if (sent.at(x) >= 'A' && sent.at(x) <= 'Z')
                {
                    sent.at(x) = sent.at(x) - 'A' + 'a';
                }
            }
            cout << "Lowercase: " << sent << endl;
        }

        if (sel == 4)
        {
            for (a = sent.length() - 1; a >= 0; a--)
            {
                cout << sent.at(a);
            }
        }
    }

system("pause");
return 0;

最佳答案

我个人会使用switch 选择语句。我粗略地这样做只是为了解释一下它如何使您的代码更加友好和易于理解。

int sel;
bool validInput = false;

    switch(sel)
    {
        case 1:
            //display middle char if there's one
        case 2:
            //convert to uppercase
        case 3:
            //convert to lowercase
        case 4:
            //display backwards
            validInput = true;
            break;
        default: //if number does not meat 1, 2, 3 or 4
            validInput = false;
            break;
    }

您可能会注意到,对于案例 1、案例 2、案例 3 和案例 4,有一个中断只是说如果数字在 1 到 4 之间; validInput 为真。

引用:Switch Selection Statement

关于c++ - 如何使用循环清理此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46758368/

相关文章:

c++ - 删除自身的对象的线程安全实现

c++ - VC++中如何使用资源?

c++ - CURAND_STATUS_LAUNCH_FAILURE + CUDA 7.5

python - 遍历两个不同长度的列表

java - 2 个数字的范围之和是多少?

c++ - mkfifo 备选方案

python - 我正在将一组N值传递给循环,但无法获取它以打印输出

c++ - 可以使用ofstream在打印机上打印

c++ - OpenGL-点云的变色方案

visual-c++ - UCS2 与 UTF。 UCS2编码不能显示哪些语言?