Я написал код для заполнения массива из файла а затем используйте этот массив, чтобы сравнить его с пользовательским вводом Программа должна попросить пользователя ввести имя или часть имени для поиска в множество вот код:
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
int main()
{
bool found = false;
const int arraySize = 35;
const int length = 100;
char contacts[arraySize][length];
int count = 0; // Loop counter variable
ifstream inputFile; // Input file stream object
inputFile.open("input.txt"); // Open the file.
// Read the numbers from the file into the array.
// After this loop executes, the count variable will hold
// the number of values that were stored in the array.
while (count < arraySize && inputFile >> contacts[count])
count++;
// Close the file.
inputFile.close();
char search[length];
char *fileContact = nullptr;
int index;
cout << "To search for your contact's number \nplease enter a name or partial name of the person.\n";
cin.getline(search, length);
for (index = 0; index < arraySize; index++)
{
fileContact = strstr(contacts[index], search);
if (fileContact != nullptr)
{
cout << contacts[index] << endl;
found = true;
}
}
if (!found) cout << "Sorry, No matches were found!";
return 0;
}
и имена в файле
«Алехандра Крус, 555–1223»
«Джо Луни, 555-0097»
"Джери Палмер, 555-8787"
"Ли Чен, 555-1212"
"Холли Гэддис, 555-8878"
"Сэм Уиггинс, 555-0998"
"Боб Кейн, 555-8712"
"Тим Хейнс, 555-7676"
"Уоррен Гэддис, 555-9037"
"Жан Джеймс, 555-4939"
"Рон Палмер, 555-2783"
так что код работает, но проблема в когда я пишу Алехандру например вывод: «Алехандра на выходе должно отображаться полное имя и номер: «Алехандра Крус, 555–1223»
Кто-нибудь знает, как это исправить? Благодарность!!
Извлеките минимальный воспроизводимый пример. В частности, исключите ввод из вашего примера кода.





Когда вы используете
inputFile >> contacts[count]
contants[count].Это объясняет ваш результат.
Вместо этого вам нужно использовать istream::get.
while (count < arraySize && inputFile.get(contacts[count], length) )
count++;
Выше должны быть все строки файла до количества строк arraySize.
Вы можете добавить некоторые отладочные данные для устранения проблемы.
while (count < arraySize && inputFile.get(contacts[count], length) )
{
std::cout << "Read " << count+1 << "-th line.\n" << "\t" << contants[count] << "\n";
count++;
}
это устранило проблему !! теперь он показывает полное имя и номер, если я ввел имя, однако есть ли способ показать контакт, если я ввел фамилию? например, если контакты: «Холли Гэддис, 555-8878», «Уоррен Гэддис, 555-9037», могу ли я ввести фамилию, которая является Гэддис, и показать оба контакта?
@ fluy619, конечно можно. Он должен работать с вашим опубликованным кодом.
Я попытался ввести Gaddis и показать оба контакта, которые связаны с этим именем, но вывод: «Извините, совпадений не найдено!»
Похоже, что в массиве хранится только первое имя, что означает, что другие имена не будут отображаться, если пользователь введет свое имя во вход
@ fluy619, поскольку вы приняли ответ, справедливо ли предположить, что на ваши вопросы / сомнения были даны ответы?
да, сэр, мне нужно прочитать только до конца файла, ваш метод считывает только первую строку файла в массив, это моя единственная забота сейчас
Вы что-нибудь сделали, чтобы увидеть, что на самом деле было помещено в ваш массив? Почему нет?