Как исправить ошибку неправильного преобразования из 'char' в 'const char*' [-fpermissive]?

Привет, я новичок, и мне нужно сделать простую программу телефонной книги на C++ с использованием библиотеки. Я бы определенно использовал, но мне не разрешено, так как это для задания. Ниже мой код до сих пор, и у меня есть 3 ошибки, которые я не знаю, как решить. Я знаю, что преобразование из char в const char* не разрешено, но мне действительно нужно сравнить эти два массива типа c, и я не могу понять, как это сделать. Я использую strcmp, и я использую '\ 0' в качестве символа, который кажется правильным.

#include <iostream>

#include <cstring>

using namespace std;

struct contact {
char name[30];
char surname[30];
char phone_number[30];
};
int main() {


            for (int i = 0; i < 30; i++)
            {
                if (strcmp(person.name[i],person.surname[i]) != '\0')   <--- //ERROR HERE
                    cout << person.name[i] << person.surname[i] << person.phone_number[i];
                check++;
            }
           
            char temp;
            char temp1;
            cout << "Insert the name of the contact to delete: \n";
            cin >> temp;
            cout << "Insert the surname of the contact to delete: \n";
            cin >> temp1;
            int check = 0;
            for (int i = 0; i < 30; i++)
            {
                if (strcmp(temp,person.name[i]) == 0 && strcmp(temp1, person.surname[i]) == 0)
                {   ^-- // 2 ERRORS HERE CONVERSION FROM 'CHAR' TO 'CONST CHAR*'
                    cout << "Contact deleted!\n";
                    person.name[i] = '\0';
                    person.surname[i] =  '\0';
                    person.phone_number[i] = '\0';
                    check++;
                }
                if (check == 0)
                {
                    cout << "This person is not in your contact list\n ";
                 
            return 0;
    }


    

Функция strcmp возвращает 0, 1 или -1. И вообще - значение int. Выражение '\0' интерпретируется компилятором как char (точнее, signed char). Вероятно, вы захотите изменить это на простое 0 целое число.

user16004728 20.11.2022 16:19
temp==person.name[i] - так можно сравнить два персонажа. strcmp предназначен для сравнения символьных строк с завершающим нулем. cin<<temp1 будет читать один символ. Просто используйте std::string для ввода.
Quimby 20.11.2022 16:20

Я не совсем уверен, чего вы на самом деле пытаетесь достичь с помощью if (strcmp(person.name[i],person.surname[i]) != '\0')? Это просто ерунда.

πάντα ῥεῖ 20.11.2022 16:21

И, конечно же, функция strcmp сравнивает две строки, а не два символа.

user16004728 20.11.2022 16:21

Этот код безнадежно запутан и нуждается в переписывании с нуля. Честно говоря, слишком много неправильного, чтобы действительно иметь дело с этим форумом. У меня было несколько попыток написать ответ, но я сдался. Вам нужно связаться с кем-то, кто может объяснить вам основы. Есть много разных вещей, которые вы в настоящее время неправильно понимаете,

john 20.11.2022 17:24

Вам также действительно нужно писать меньше кода. Нет смысла писать 50 строк кода, если ни одна из них не работает. Выберите простейшую минимальную задачу, напишите для нее код (скажем, максимум 10 строк кода) и заставьте его работать, прежде чем добавлять код. В данный момент вы пытаетесь сделать слишком много слишком быстро.

john 20.11.2022 17:27

@john да, я знаю, что мне нужно изучить основы, но я новичок и начал использовать C++, и мне это сложно как первый язык. Кроме того, наш профессор настолько примитивен, что сказал использовать только строки в стиле c, что только усугубляет ситуацию. Я просто начну с нуля, так как этот код на самом деле очень неудобен, я это признаю. Благодарю за ваш ответ!

Eternal23 20.11.2022 17:39

@ Eternal23 C++ как первый язык сложен, а взгляды ваших профессоров смешны.

john 20.11.2022 19:22
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
1
8
81
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Temp и temp1 равны chars. strcmp ожидает const char*.

Я бы предложил использовать std::string для C++, это оболочка над char* и имеет более удобные методы для работы.

Я просто начну с нуля, так как этот код действительно неудобен. Прошу прощения за ненужный вопрос.

Пишите сюда только ответы.

Stoica Mircea 23.11.2022 10:21
Ответ принят как подходящий

Возможно, вы плохо понимаете структуру, вот образец, который я исправил, вы можете взять его для справки

#include <iostream>
#include <stdio.h>

using namespace std;

struct person{
    char name[30];
    char surname[30];
    char phone_number[30];
};

int main()
{
    person Persons[] = { // structure initialization
        {"Bob","Thug Bob","01230123"},
        {"Marry","Gangster Marry","9999999"},
        {"Somebody","Mr Somebody","777777"}
    };

    int Size = sizeof(Persons)/sizeof(Persons[0]); // return size of Persons array

    for(int i=0;i<Size;i++){
        cout << Persons[i].name << "\t"<< Persons[i].surname << "\t"<< Persons[i].phone_number <<endl;
    }

    return 0;
}

Другие вопросы по теме