我是C的新手,我正在努力学习,所以对我很轻松:D
我目前正在尝试制作一个简单的银行帐户控制台应用程序。我得到了以下代码:
#include <stdio.h>
#include <string.h>
void parseCommand(char cmd[15], bool end) {
if(cmd != NULL) {
if(strstr(cmd, "listaccounts") != NULL) {
} else if(strstr(cmd, "addaccount") != NULL) {
} else if(strstr(cmd, "removeaccount") != NULL) {
} else if(strstr(cmd, "withdraw") != NULL) {
} else if(strstr(cmd, "deposit") != NULL) {
} else if (strstr(cmd, "exit") != NULL) {
end = true;
} else {
printf("Unknown Command: %s\n", cmd);
}
} else {
printf("cmd is null");
}
}
int main() {
printf("Welcome to the Account Management System\n");
printf("Please use one of the following commands:\n");
bool end = false;
while(true) {
printf("\tlistaccounts\n");
printf("\taddaccount\n");
printf("\tremoveaccount\n");
printf("\twithdraw\n");
printf("\tdeposit\n");
printf("\texit\n");
char cmd[15];
fgets(cmd,15,stdin);
parseCommand(cmd, end);
if(end == true) {
printf("Shutting down...");
break;
}
}
return 0;
}
但是当我输入&#34;退出&#34;程序刚刚在while循环中重新开始,并要求输入新的输入。我究竟做错了什么?我的猜测是我尝试比较两个字符串。
答案 0 :(得分:3)
在C中,变量按值传递。因此,无论您的parseCommand方法中有什么值end
,外部函数都不会看到它。一种简单的解决方法是让您的函数返回end
:
bool parseCommand(char cmd[15], bool end) {
///
return end;
}
// in main:
end = parseCommand(cmd, end);
答案 1 :(得分:2)
您正在尝试修改在函数外声明的变量的值。你需要一个指向它的指针。
答案 2 :(得分:2)
要编译,首先添加#include <stdbool.h>
。
在您的代码中,您使用pass-by-value传递end
。这将在end
范围内创建parseCommand()
的本地副本。无论使用end
代码中的parseCommand()
值执行什么操作,都不会反映到main()
。
parseCommand(cmd, end);
更改为parseCommand(cmd, &end);
void parseCommand(char cmd[15], bool end)
更改为void parseCommand(char cmd[15], bool *end)
end = true;
更改为*end = true;
此外,if(cmd != NULL)
应更改为if ((cmd != NULL) && (end != NULL))
答案 3 :(得分:2)
如果你想让'parseCommand'从main函数改变变量,你应该传递一个指针。
void parseCommand(char cmd[15], bool * end) {
if(cmd != NULL) {
if(strstr(cmd, "listaccounts") != NULL) {
} else if(strstr(cmd, "addaccount") != NULL) {
} else if(strstr(cmd, "removeaccount") != NULL) {
} else if(strstr(cmd, "withdraw") != NULL) {
} else if(strstr(cmd, "deposit") != NULL) {
} else if (strstr(cmd, "exit") != NULL) {
*end = true;
} else {
printf("Unknown Command: %s\n", cmd);
}
} else {
printf("cmd is null");
}
}
int main() {
printf("Welcome to the Account Management System\n");
printf("Please use one of the following commands:\n");
bool end = false;
while(true) {
printf("\tlistaccounts\n");
printf("\taddaccount\n");
printf("\tremoveaccount\n");
printf("\twithdraw\n");
printf("\tdeposit\n");
printf("\texit\n");
char cmd[15];
fgets(cmd,15,stdin);
parseCommand(cmd, &end);
if(end == true) {
printf("Shutting down...");
break;
}
}
return 0;
}
答案 4 :(得分:1)
当您传递说void parseCommand(char cmd[15], bool end)
时,您正在创建函数范围内的重复变量(您可能希望查找范围)。因此bool end
成为函数的复制本地,当函数完成时,无法再次访问它。您可以使用指针并将bool end
设为bool *end
,或者您可以让该函数返回bool
,说bool parseCommand(char cmd[15], bool end)