簡體   English   中英

如何通過在 C++ 中使用諸如“退出”之類的詞來停止循環?

[英]How to stop a loop by using a word such as "exit" in C++?

所以我有一個編碼任務要完成,但我在完成它時遇到了麻煩。 具體說明如下:

為了使電話號碼更容易記住,一些公司使用字母來表示他們的電話號碼。 例如,使用字母,電話號碼 438-5626 可以顯示為 GET LOAN。 在某些情況下,為了使電話號碼有意義,公司可能會使用七個以上的字母。 例如,225-5466 可以顯示為 CALL HOME,它使用八個字母。

編寫一個程序,執行以下操作:

  • 提示用戶輸入 Y 或 y 開始轉換,或任何其他輸入退出。
  • 提示用戶輸入以字母表示的電話號碼,並以數字形式輸出相應的電話號碼
  • 如果用戶輸入超過七個字母,則僅處理前七個字母。
  • 在第三個數字后輸出 –(連字符)。
  • 允許用戶同時使用大寫和小寫字母以及單詞之間的空格。
  • 根據用戶需要處理盡可能多的電話號碼,同時允許他們在每次轉換后退出。

我目前已經完成了除了最后一個(有點)的所有步驟。

教師正在尋找“退出”一詞以退出程序。 目前,我已將其設置為“%”以結束程序。 從邏輯上講,您會說只需將“%”更改為“退出”並繼續,但是當我這樣做時會出錯。

#include <iostream>
using namespace std;

int main()
{        
    int counter;        
    char phoneNumber;
    char cont;
    
    //  Prompts a user to enter Y or y to begin conversion, or any other input to quit. 
    cout << "Please enter 'Y' or 'y' to continue, otherwise the program with quit.\n Input: ";
    cin >> cont;
    if (cont == 'y' || cont == 'Y')
    {            
        // statement(s) will execute if the boolean expression is true
    }
    else
    {
        return 0;
        // statement(s) will execute if the boolean expression is false
    }
    
    cout << "To stop this program enter 'exit'." << endl;
    cout << "Enter a phone number in letters only \nNOTE: Must enter 7 or more letters: ";
    cin >> phoneNumber;
    cout << endl;
    phoneNumber = static_cast<char>(toupper(phoneNumber));
    while (phoneNumber != '%')
    {
        cout << "\nTo stop this program enter 'exit'." << endl;
        cout << "Enter a phone number in letters only." << endl;
        
        for (counter = 0; phoneNumber != '%' && counter < 7; counter++)
        {
            cin >> phoneNumber;
            
            if (counter == 3)
                cout << "-";
            
            if ((phoneNumber >= 'A' && phoneNumber <= 'Z') || 
                (phoneNumber >= 'a' && phoneNumber <= 'z'))
                switch (phoneNumber)
                {
                    case 'A':
                    case 'a':
                    case 'B':
                    case 'b':
                    case 'C':
                    case 'c':
                        cout << 2;
                        break;
                    case 'D':
                    case 'd':
                    case 'E':
                    case 'e':
                    case 'F':
                    case 'f':
                        cout << 3;
                        break;
                    case 'G':
                    case 'g':
                    case 'H':
                    case 'h':
                    case 'I':
                    case 'i':
                        cout << 4;
                        break;
                        
                    case 'J':
                    case 'j':
                    case 'K':
                    case 'k':
                    case 'L':
                    case 'l':
                        cout << 5;
                        break;
                    case 'M':
                    case 'm':
                    case 'N':
                    case 'n':
                    case 'O':
                    case 'o':
                        cout << 6;
                        break;
                    case 'P':
                    case 'p':
                    case 'Q':
                    case 'q':
                    case 'R':
                    case 'r':
                    case 'S':
                    case 's':
                        cout << 7;
                        break;
                        
                    case 'T':
                    case 't':
                    case 'U':
                    case 'u':
                    case 'V':
                    case 'v':
                        cout << 8;
                        break;
                        
                    case 'W':
                    case 'w':
                    case 'X':
                    case 'x':
                    case 'Y':
                    case 'y':
                    case 'Z':
                    case 'z':
                        cout << 9;
                        break;
                }
        }
        while (cin.get() != '\n')
            ;
    }
    return 0;
}

我認為這與字符有關,這就是我所能找到的。 我一直在互聯網上尋找答案,但我的答案是空的。 您能提供的任何幫助將不勝感激。

如果您想將 phonenumber 變量更改為“退出”,它需要是一個字符串,而不是一個字符。

在 C++ 中,char 和 string 之間有很大的區別。 char 是單個字符,而字符串是一堆字符。 對於字符串,一堆可能意味着 0、1 或更多字符。 兩者通過使用撇號(用於字符)或引號(用於字符串)來區分。 由於您的程序僅使用 char 作為輸入,因此當您獲得超過一個字符的輸入時,您的程序不知道如何處理。 您將不得不使用字符串來包含您必須編寫“退出”的情況。

你的程序的基本結構應該是:

int main() {
    std::string line;

    while (std::getline(std::cin, line) && line != "exit") {
        std::cout << phone_digits(line) << "\n";
    }
}

這幾乎是最簡單的。 “退出”條件並不是絕對必要的,因為關於如何表示輸入結束有一個廣泛的約定。 在 Windows 上是 Ctrl+Z,而在類​​ UNIX 系統(Linux、NetBSD、macOS)上是 Ctrl+D。

我也不明白你為什么要先輸入“y”才能真正啟動程序。 這也是不必要的,但你的老師可能會堅持這樣做。

接下來就是寫phone_digits函數,放在main函數的上面 該函數將一個字符串作為參數,並返回一個字符串。

std::string phone_digits(const std::string &input) {
    std::string result;

    // TODO: convert letters from input to digits in output
    // TODO: insert the hyphen in the result

    return result;
}

要以這種形式編寫函數,您必須閱讀std::string類的文檔,以了解如何遍歷輸入中的所有字符以及如何將字符添加到結果字符串的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM