Программа для ввода пользовательского ввода и отображения его проблем - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь заставить эту программу принимать три значения от пользователей разной длины, каждая из которых, например, W3Schools.com говорит, чтобы я вставил variablename.length(); в код, чтобы получить всю строку введенный пользователем, но он работает только для одного из них.

У меня их три, если не больше, почему он работает только столько раз, что-то мне не хватает в #include files или что-то еще , Код довольно прост, я подумал, что попытался go сделать его максимально подробным. Вот код:

// CreateWriteDisplay.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <cstring>
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
    void OpeningMessage() {
           cout << "Enter Your First Name and Last name:";
           cout << "Enter Your Age: ";
           cout << "Enter Your Ocupation:";
           cout << " This is yout Ocupation:";
}

int main()
{
OpeningMessage(), "\n";
    int AccountAge;
    string FullName;
    string Ocupation;
    cin >> AccountAge;
    cin >> FullName;
    cin >> Ocupation;
    cout << FullName << FullName.length() << "\n";
    cout << AccountAge << "\n";
    cout << Ocupation << Ocupation.length();
    return 0;

Также, если кто-нибудь знает больше о Учебниках, таких как веб-сайт W3Schools, я мог бы действительно использовать эту практику, если вы не можете сказать, что я новичок в программировании на C ++. Я сделал действительно хороший тест на первом уроке. Мне действительно нравится этот язык, он немного напоминает мне JavaScript, но гораздо более мощный. Так что любая помощь будет принята с благодарностью. Заранее спасибо.

1 Ответ

1 голос
/ 20 апреля 2020

Я предполагаю, что ваша проблема в том, что

cin >> FullName;

прекратит чтение с первого пробела, поэтому, если вы введете имя и фамилию, имя будет прочитано, а фамилия останется в буфер. Затем он будет прочитан следующим cin

cin >> Ocupation;

. Вы можете решить это, разделив имя и фамилию в две отдельные переменные или используя std::getline.

. Начнем с того, что лучше всего использовать первое решение, а затем вернуться к getline. Я предлагаю:

#include <iostream>

using std::cout;     //using namespace std is not a good practice **
using std::cin;      //it's best to use std:: scope or using only what you need
using std::string;   //not the whole namespace, C++17 allows for comma
using std::endl;     //separated usings

int main()
{
    int AccountAge;
    string LastName;
    string FirstName;
    string Ocupation;

    cout << "Enter Your Age: ";
    cin >> AccountAge;

    cout << "Enter Your First Name and Last name: ";
    cin >> FirstName >> LastName;

    cout << "Enter Your Ocupation: ";
    cin >> Ocupation;

    cout << "Full Name: " << FirstName << " " << LastName << ", Length: " << 
    FirstName.length() + LastName.length() << endl;

    cout << "Age: "<< AccountAge << endl;
    cout << "Occupation: " << Ocupation << ", Length: " << Ocupation.length();
    return 0;
}

** Почему "используется пространство имен std;" считается плохой практикой?

...