C++ While 循环无法正常工作

C++ While loop not working correctly

我正在使用以下代码来拆分一行文本。

一行文字,例如 "adduser john -u 2001 -g 1002 -p john123 -c Project Work" 传递给构造函数。

我正在尝试通过命令“-u、-g、-p、-c”分隔文本

"john" 将保存为名称, “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] != '[=10=]'){
    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] = '[=10=]';
    printf(bufferLine);
    if (_line[i] == ' ')
    {

        if (bufferLine[0] == '-')
        {
            //test only u and c commands for now
            if (bufferLine[1] == 'u'){


                bufferLine[0] = '[=10=]'; //clear contents of array
                tempLength1 = 0;

                while (!_line[i] == '-'){
                    bufferLine[tempLength1] = _line[i];
                    i++;
                    tempLength1++;
                }
                bufferLine[tempLength1] = '[=10=]';
                printf(bufferLine);
                printf("\n This is UID \n");
                setUID((unsigned int)bufferLine);
            }

            else if (bufferLine[1] == 'c'){

                bufferLine[0] = '[=10=]';
                tempLength1 = 0;

                while (!_line[i] == '[=10=]'){
                    bufferLine[tempLength1] = _line[i];
                    i++;
                    tempLength1++;
                }

                bufferLine[tempLength1] = '[=10=]';
                printf(bufferLine);
                printf("\n this is gecos \n");
                setGecos(bufferLine);
            }

        }

        else{
            //is name
            bufferLine[tempLength1] = '[=10=]';
            setName(bufferLine);
            printf("\n I am the user's name\n");
            printf(bufferLine);
            printf("\n");

        }
        bufferLine[0] = '[=10=]'; //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] == '-') 我尝试更改 '-' 以使用 ' ' 甚至任何字母 'a' 'g' 'd' 退出 while 循环,但是除了'\0' 什么都不起作用。这仅适用于 -c 命令,因为应该打印其后的所有内容。

-c 命令可以正常工作,保存名称也是如此。但是,其他命令中的 none 将起作用,因为它没有进入循环。

我已经考虑这个问题一段时间了,我相信它应该可以工作,但是代码从来没有通过 while 循环。语法有问题吗?或者我对嵌套循环有什么遗漏吗?

谢谢

这个表达式

while (!_line[i] == '-'){

计算为(参见 operator precedence):

while ((!(_line[i])) == '-') { // because ! has higher precedence than ==
while (false == '-') {         // because _line[i] == ' ', !' ' is false
while (false) {

你的意思可能是

while (_line[i] != '-') {

while (!_line[i] == '-') 本质上是 while ((!_line[i]) == '-')(注意 operators precedence)。

您可能想要的是 while (! (_line[i] == '-')) { 或更简单的 while (_line[i] != '-'){.

!_line[i] == '-'

! 的优先级低于 ==,被评估为

(!_line[i]) == '-'

这永远不会是真的

http://en.cppreference.com/w/cpp/language/operator_precedence