Привет, я новичок, и мне нужно сделать простую программу телефонной книги на 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;
}
temp==person.name[i]
- так можно сравнить два персонажа. strcmp
предназначен для сравнения символьных строк с завершающим нулем. cin<<temp1
будет читать один символ. Просто используйте std::string
для ввода.
Я не совсем уверен, чего вы на самом деле пытаетесь достичь с помощью if (strcmp(person.name[i],person.surname[i]) != '\0')? Это просто ерунда.
И, конечно же, функция strcmp сравнивает две строки, а не два символа.
Этот код безнадежно запутан и нуждается в переписывании с нуля. Честно говоря, слишком много неправильного, чтобы действительно иметь дело с этим форумом. У меня было несколько попыток написать ответ, но я сдался. Вам нужно связаться с кем-то, кто может объяснить вам основы. Есть много разных вещей, которые вы в настоящее время неправильно понимаете,
Вам также действительно нужно писать меньше кода. Нет смысла писать 50 строк кода, если ни одна из них не работает. Выберите простейшую минимальную задачу, напишите для нее код (скажем, максимум 10 строк кода) и заставьте его работать, прежде чем добавлять код. В данный момент вы пытаетесь сделать слишком много слишком быстро.
@john да, я знаю, что мне нужно изучить основы, но я новичок и начал использовать C++, и мне это сложно как первый язык. Кроме того, наш профессор настолько примитивен, что сказал использовать только строки в стиле c, что только усугубляет ситуацию. Я просто начну с нуля, так как этот код на самом деле очень неудобен, я это признаю. Благодарю за ваш ответ!
@ Eternal23 C++ как первый язык сложен, а взгляды ваших профессоров смешны.
Temp и temp1 равны chars. strcmp ожидает const char*.
Я бы предложил использовать std::string для C++, это оболочка над char* и имеет более удобные методы для работы.
Я просто начну с нуля, так как этот код действительно неудобен. Прошу прощения за ненужный вопрос.
Пишите сюда только ответы.
Возможно, вы плохо понимаете структуру, вот образец, который я исправил, вы можете взять его для справки
#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;
}
Функция strcmp возвращает 0, 1 или -1. И вообще - значение int. Выражение '\0' интерпретируется компилятором как char (точнее, signed char). Вероятно, вы захотите изменить это на простое 0 целое число.