c++ 输入的用户代码是否有问题?[已关闭]

lfapxunr  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(153)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
using namespace std;

struct customer
{
    char fname[11];        
};

void name(customer& name)
{
    bool check = false;
    do {
        cout << "Enter your first name : ";

        cin.getline(name.fname, 10);// goal is to exit once press enter

        if (name.fname == '\n') //This doesnt work. i also tried using cin.get, cin.ignore, cin.peek and it still doesnt work, i tried changing the '\n' to '\0' and 0 just to see.
        {
            cout << "Invalid Entry\n";
        }
        else
            check = true;
    } while (check != true);
}

int main()
{
    customer cr;
    name(cr);
    return 0;
}

我创建这段代码只是为了最终弄清楚如何使用cin.getline(),这是一段简单的代码,它需要一个名称。
目标是输入名称并在按Enter键时退出代码。

wj8zmpe1

wj8zmpe11#

你不是说

if (name.fname == '\n')

你是说

if (name.fname[0] == '\n')
wecizke3

wecizke32#

您正在尝试将char[]数组与单个char进行比较,但此操作无效。请改用类似strcmp()的字符串比较。但是,cin.getline()不会将终止的'\n'存储到fname中作为开始。
试试类似这样的方法:

#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <iostream>
using namespace std;

struct customer
{
    char fname[11];
};

void name(customer& name)
{
    bool check = false;
    do {
        cout << "Enter your first name : ";

        if (!cin.getline(name.fname, 11))
            break;

        //if (name.fname[0] == '\0')
        if (strcmp(name.fname, "") == 0)
            cout << "Invalid Entry\n";
        else
            check = true;
    }
    while (!check);
}

int main()
{
    customer cr;
    name(cr);
    return 0;
}

也就是说,您确实应该使用std::string而不是char[],例如:

#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include <iostream>
using namespace std;

struct customer
{
    string fname;
};

void name(customer& name)
{
    bool check = false;
    do {
        cout << "Enter your first name : ";

        if (!getline(cin, name.fname))
            break;

        if (name.fname == "")
            cout << "Invalid Entry\n";
        else
            check = true;
    }
    while (!check);
}

int main()
{
    customer cr;
    name(cr);
    return 0;
}
pgx2nnw8

pgx2nnw83#

试试这个代码

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>

struct customer
{
    char fname[11];
};

void name(customer& name)
{
    bool check = false;
    do {
        std::cout << "Enter your first name : ";
        std::cin.getline(name.fname, 10);
  
        if (std::cin.fail() || name.fname[0] == '\n')
        {
            std::cout << "Invalid Entry\n";
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        else
            check = true;
    } while (check != true);
}

int main()
{
    customer cr;
    name(cr);
    return 0;
}

相关问题