Как отправить сообщение об ошибке, когда пользовательский ввод c-строки пуст? - PullRequest
0 голосов
/ 14 мая 2018

Так что я пытаюсь сделать программу прямо сейчас.Я пытаюсь использовать c-строку, чтобы получить имя и вывести пользовательский ввод, используя меню # 2. Кроме того, я хочу отправить сообщение об ошибке и попросить пользователя снова ввести имя, когда пользователь вводит пустое значение.

Реальная проблема в том, что я знаю, как отправить сообщение об ошибке, когда у меня есть пустая строка, но не когда у меня есть пустая c-строка.

Это моя программа.

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
void inputPika(char[]);
void display_menu();
void displayPika(char[]);
void display_menu()
{
    //Display menu for user selection
    cout << "The Name game: " << endl;
    cout << "1. Pika Name " << endl;
    cout << "2. Display Pika Name " << endl;
}
void inputPika(char a[])
{
    const int SIZE = 40;


    cin.getline(a, SIZE);
}
void displayPika(char a[])
{
    cout << a << endl;
}
int main()
{
    int pick = 0;
    const int SIZE = 40;
    char name[SIZE];
    cin.ignore();

    while (true)
    {
        display_menu();
        cin >> pick;
        cin.ignore();

        switch (pick)
        {
        case 1:
            cout << "1. Input Name: ";

            inputPika(name);
            break;
        case 2:
            cout << "2. Display Name: ";
            displayPika(name);
            break;
        }
    }
}

(К сожалению, другим моим функциям нужна c-строка, поэтому я не могу все изменить на строку) Также еще один вопрос.

Когда я запускаю свою программу, программа нене запускается автоматически, что я должен нажать Enter, чтобы увидеть опцию меню.Я не уверен, почему моя программа сделала это.

1 Ответ

0 голосов
/ 14 мая 2018

Чтобы решить «автоматический запуск», вам необходимо удалить следующее:

cin.ignore();

В вашем случае пустое имя будет отображаться в символе '\0' (нулевой терминатор) в вашем буфере, так что вы можете проверить, если name[0] == '\0' после возврата из функции inputPika().

...