Я использую следующий код, чтобы разбить линию текста.C++ Хотя цикл работает неправильно
Строка текста, такая как "adduser john -u 2001 -g 1002 -p john123 -c Project Work" передается конструктору.
Я пытаюсь отделить текст с помощью команды «-u, -g, -p -c»
«джон» будет сохранено как имя, «2001» будет сохранен как UID, «1002» будет сохранен как GID и т.д.
AccountInfo::AccountInfo(char* line){
_line = line;
char bufferLine[256];
unsigned int length1 = 0;
unsigned int tempLength1 = 0;
//find length of line of text
while (_line[length1] != '\0'){
length1++;
}
//separate the text by white space
// start at 8 because adduser is not a command
for (int i = 8; i < length1 + 1; i++){
bufferLine[tempLength1 + 1] = '\0';
printf(bufferLine);
if (_line[i] == ' ')
{
if (bufferLine[0] == '-')
{
//test only u and c commands for now
if (bufferLine[1] == 'u'){
bufferLine[0] = '\0'; //clear contents of array
tempLength1 = 0;
while (!_line[i] == '-'){
bufferLine[tempLength1] = _line[i];
i++;
tempLength1++;
}
bufferLine[tempLength1] = '\0';
printf(bufferLine);
printf("\n This is UID \n");
setUID((unsigned int)bufferLine);
}
else if (bufferLine[1] == 'c'){
bufferLine[0] = '\0';
tempLength1 = 0;
while (!_line[i] == '\0'){
bufferLine[tempLength1] = _line[i];
i++;
tempLength1++;
}
bufferLine[tempLength1] = '\0';
printf(bufferLine);
printf("\n this is gecos \n");
setGecos(bufferLine);
}
}
else{
//is name
bufferLine[tempLength1] = '\0';
setName(bufferLine);
printf("\n I am the user's name\n");
printf(bufferLine);
printf("\n");
}
bufferLine[0] = '\0'; //reset buffer line
tempLength1 = 0; // reset incrementation for buffer line
}
else{
bufferLine[tempLength1] = _line[i];
tempLength1++;
}
}
}
Я работаю на функциональности -u команды. Он достигает части кода if (bufferLine [1] == 'u'), но всегда обходит цикл while после него
while (! _line [i] == '-') Я попытался изменить ' - ', чтобы выйти из цикла while с' 'и даже с любой буквой' a '' g '' d ', однако ничего не работает, кроме' \ 0 '. Это приемлемо только для команды -c, поскольку все после нее должно быть напечатано.
Команда -c работает так, как должна, как и сохранение имени. Однако ни одна из других команд не будет работать, потому что она не попадает в цикл.
Я думал об этой проблеме некоторое время, и я считаю, что она должна работать, однако код никогда не проходит через цикл while. Есть ли проблема с синтаксисом? Или что-то мне не хватает в вложенных циклах?
Благодаря
Спасибо за вашу помощь. Я новичок в C++ и никогда не предполагал, что приоритет будет причиной его работы. Однако теперь я получаю исключение Unhandled. Говорят, что <Ошибка чтения символов строки>, когда она попадает в -p – coracora