c-string用户输入为空时如何发送错误消息?

Posted

技术标签:

【中文标题】c-string用户输入为空时如何发送错误消息?【英文标题】:How to send an error message when c-string user input empty? 【发布时间】:2018-05-14 07:30:15 【问题描述】:

所以我现在正在尝试制作一个程序。 我尝试使用 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-string,所以我无法将所有内容都更改为字符串) 还有一个问题。

当我运行我的程序时,程序没有自动运行,我必须按回车才能看到菜单选项。我不确定为什么我的程序会这样做。

【问题讨论】:

要检查 C 字符串是否为空,您只需 strlen(str) == 0。对于第二个问题,您应该检查 cin.ignore() 呼叫... 不是真的,我会把它放在inputPika 但请注意,对于 C 字符串,您可以考虑使用 C I/O。 getline()(例如,如果可用)。在这种情况下,您可以简单地检查它的返回值。 哦,好的,谢谢 :D 我想我解决了第二个问题。我仍在处理第一个问题,但你帮了我很多。 :D 【参考方案1】:

为了解决“自动运行”,您应该删除以下内容:

cin.ignore();

在您的情况下,空“名称”将反映在缓冲区中的'\0'(空终止符)字符中,因此您可以在从inputPika() 函数返回后检查name[0] == '\0'

【讨论】:

以上是关于c-string用户输入为空时如何发送错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

当值为空时如何取消设置属性?

如何确保MFMailComposeViewController在body不为空时不发送电子邮件?

当一个或多个变量为空时,如何将多个变量发送到 laravel 中的视图

如何在条目控件为空时检测退格键

仅当 Mono 为空时如何执行操作,如果不为空则抛出错误

隐藏为空时隐藏