C 电话号码程序

C++ Phone Number Program

本文关键字:程序 电话号码      更新时间:2023-10-16

我是这个论坛的新手,正在寻求一些帮助,任何帮助将不胜感激!我对我的编程基础1级课程感到困惑,并且在这一点上很拼命,因为我已经被困了几个小时了。谢谢。

这是提示:许多网站要求电话号码。问题是有很多代表电话号码的不同方式。示例包括817-555-1234,817 555 1234(C)和(817)555-1234 x23。编写一个输入的C 程序一个包含任何格式的电话号码的字符串,并将其输出格式。对于此任务,标准格式为(817)555-1234。您的C 程序应:1.输入一个字符串,包括数字2.仅将数字从输入字符串复制到另一个字符串3.如果输入字符串不完全包含10,则发出错误消息数字4.以标准格式输出电话号码

#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <cctype>
using namespace std;
const int NUM_LENGTH = 10;
string ReadAndValidateUserNumber(string userNumber);
int main()
{
    string userNumber;
    ReadAndValidateUserNumber(userNumber);
    system("PAUSE");
    return 0;
}
string ReadAndValidateUserNumber(string userNumber)
{
    bool check = false;
    while (!check)
    {
        check = true;
        cout << "Please enter a Number: ";
        cin >> userNumber;
        if (userNumber.length() != NUM_LENGTH)
            cout << "The phone number may contain 10 digits only. n";
        else
        {
            userNumber.insert(0, "(");
            userNumber.insert(4, ")");
            userNumber.insert(8, "-");
            for (int i = 0; i < userNumber.length(); i++)
            {
                if (isdigit(userNumber[i]))
                {
                    userNumber = NUM_LENGTH;
                }
            }
        }
        if (!check)
        {
            cout << "Invalid Entry! Please try again." << endl;
        }
    }
    return userNumber;
}

您似乎有逻辑错误。

bool check = false;
while (!check)
{
  check = true;
  ....
  if (!check)
  {
        cout << "Invalid Entry! Please try again." << endl;
  }
}

您会注意到检查永远不会再次变为假。因此,如果语句永远不会执行底部,并且循环永远不会迭代一次以上,因为检查始终是正确的。您可能想做

check = true 

以正确的格式有条件。

代码处于可怕状态。冷静下来并集中精力。除了写的内容外,还有很多问题。我建议您将工作代码运送到任何代码审核网站。

您正在错误地进行检查,以及检查后您在做什么也是错误的。

    userNumber = NUM_LENGTH;

这将使NUM_LENGTH截断为char,因此您会在userNumber内有一些奇怪的东西。

这是正确的检查:

            if (!isdigit(userNumber[i]))
            {
                std::cout << "input should be only numbersn";
                return; //function should return void
            }

^^这是如果要突破非数字输入,如果要跳过非数字,可以将std::copy_if使用到另一个字符串中,或者调整上述内容以为您使用。如果要删除非数字的东西,也可以使用std::remove_if

std::string fetched_input;
std::copy_if(userNumber.begin(), userNumber.end(), fetched_input.begin(), std::isdigit);

^^这只会为您提供数字的字符串。

另外,您不会在正确的位置进行检查。再次考虑一下。