цикл while — c ++ c-strings, strncat, strncpy

Предполагается, что эта программа вводит кому-то имя и выводит его как «Last, first middle». Предполагается, что имена хранятся в 3 разных массивах, и в конце они представляют собой четвертый массив для полного имени. Я также должен использовать strncpy и strncat для построения четвертого массива. У меня проблема в том, что я не знаю, как использовать strncpy в этой ситуации и как его использовать. Я могу заставить программу сказать «первый средний последний», но не правильный вывод. Другая проблема, которую я испытываю, заключается в том, что цикл while должен позволить пользователю сказать «q» или «Q» и выйти из программы, но он этого не делает.

#include <iomanip>
#include <iostream>
#include <cctype>
using namespace std;

int main()
{
char replay; //To hold Q for quit

const int SIZE = 51;
char firstName[SIZE]; // To hole first name
char middleName[SIZE]; // To hold middle name
char lastName[SIZE]; // To hold last name
char fullName[SIZE]; //To hold the full name
int count = 0;
int maxChars1;
int maxChars2;cout << "Enter Q to quit or enter your first name of no more than " << (SIZE - 1)
<< " letters: ";
cin.getline(firstName, SIZE);

while(firstName[SIZE] != 'Q' || firstName[SIZE] != 'q')
{
cout << "\nEnter your middle name of no more than " << (SIZE - 1)
<< " letters: ";
cin.getline(middleName, SIZE);

cout << "\nEnter your last name of no more than " << (SIZE - 1)
<< " letters: ";
cin.getline(lastName, SIZE);

maxChars1 = sizeof(firstName) - (strlen(firstName) + 1);
strncat(firstName, middleName, maxChars1);

cout << firstName << endl;

maxChars2 = sizeof(lastName) - 1;
strncpy(firstName, lastName, maxChars2);
lastName[maxChars2] = '\0';

cout << lastName << endl;
}

system("pause");
return 0;
}

0

Решение

Ваш цикл while не работает по нескольким причинам:

  • Вы на самом деле смотрите один за концом firstName массив (firstName[SIZE]) а не первый символ (firstName[0]).
  • Вы не проверяете, чтобы убедиться, firstName является только один персонаж q или же Q,
  • Вы спрашиваете имя только один раз, перед циклом, вместо каждого цикла.

Ваш звонок в strncpy не выглядит правильно. Как написано, вы берете фамилию и копируете ее в firstName, уничтожив имя и отчество, которые вы только что соединили вместе там. Как сказал @ steve-jessop, соберите полное имя в fullName,

Ты наверное предполагаемый использовать strncpy а также strncat потому что это надуманный пример / упражнение, в котором буфер с полным именем имеет ограниченный размер, поэтому некоторые комбинации имен не будут соответствовать и должны быть усечены.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]