Поэтому я работаю над этой проблемой часами, и я хотел бы получить некоторую помощь. Завтра у меня есть программа. В принципе, у меня есть входной файл, который имеет имя и фамилию, а затем четыре числа с плавающей запятой. Это выглядит так:
John W.
Smith
78.8 56.5 34.5 23.3
Jane
Doe
34.5 23.4 35.7 87.0
No
More
Мне нужно прочитать имя и фамилию в массиве указателей. Пока я просто пытаюсь прочитать в каждой строке переменную "имя", и я выводю в текстовый файл, чтобы увидеть, правильно ли я читаю данные. К сожалению, он останавливается после чтения в поплавках, он не читается в следующих именах.
char *newPtr;
char *nameList[50] = {0};
char name[15];
int i = 0;
infile.getline(name, 15);
while (strcmp (name, "No") != 0)
{
newPtr = new char[15];
strcpy(newPtr, name);
nameList[i] = newPtr;
infile.getline(name, 15);
outfile << name << endl;
i++;
}
До сих пор выход был только что:
Джон У.
кузнец
78,8 56,5 34,5 23,3
EDIT: цикл в настоящее время бесконечен, но из моего вывода я знаю, что я еще не обработал все остальные имена, я останавливаюсь на первых числах.
Если бы я мог помочь, это было бы здорово! Я очень ограничен функциями, которые я могу использовать, я уверен, что я должен просто использовать функцию getline здесь, я не могу использовать ничего интересного.
В ее слайдах мой учитель здесь имеет этот код, который помогает нам читать в именах:
char *newPtr;
char *NameList[6] = {0};
char Name[20];
int a = 0;
infile.getline(Name, 20);
while(strcmp(Name, sentinel) != 0)
{
newPtr = new char[20];
strcpy(newPtr,Name);
NameList[a++] = newPtr;
infile.getline(Name,20);
}
Мы еще не учили о струнах, и я уверен, что не могу использовать то, о чем мы не говорили в классе. Спасибо за помощь до тех пор, кто прокомментировал это.
Ты почти там... главное, ты забыл попробовать прочитать цифры. Код ниже читает их в w
, x
, y
и z
но затем игнорирует их... вы должны делать все, что вам нужно, с ними, например, возможно, создать второй массив для фамилий и либо третий двумерный массив для поплавков или одномерный массив в 4 раза длиннее....
char *nameList[50] = {0};
char name[15];
int i = 0;
while (infile.getline(name, sizeof name) && strcmp(name, "No") != 0)
{
char* newPtr = new char[sizeof name];
strcpy(newPtr, name);
nameList[i] = newPtr;
double w, x, y, z;
if (infile.getline(name, sizeof name) && infile >> w >> x >> y >> z)
outfile << name << endl;
else
{
std::cerr << "missing rest of data for " << nameList[i] << " found\n";
exit(EXIT_FAILURE)
}
i++;
}
std::string
s? Кроме того, ваш первыйstrcmp
сравнивает выделенное, но неинициализированноеname
(что означает отсутствие завершающего нулевого символа).