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
我正在使用以下代码来拆分一行文本。
一行文字,例如 "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