application/json
我在kali linux终端上遇到问题,因为当终端执行代码时,读取所有if条件直到它到达第一个if,然后终端返回root kali,而不是执行其他如果和否则如果条件。
你能帮我吗?
答案 0 :(得分:3)
这不是你比较char
的方式。
<小时/> 这是您比较
char
的方式
(c == '1')
答案 1 :(得分:1)
代码存在一些问题...
您将输入的字符与数字进行比较。这是有效的(字符基本上是小的整数),但没有做你期望的。数字值为1的字符是Control-A
除非您将标准素翻转为非缓冲,否则您的程序将无法读取任何字符,直到您按下回车键/返回键,此时您将拥有超过一个字符(提示弹出,你键入1,然后按回车,第一个如果咨询(但目前没有匹配,因为你输入'1'
,而不是1
))等待阅读,你追求的角色和换行符。你可以通过一个读取和忽略&#34;空格&#34;的中间函数来解决这个问题。 (空格,制表符,换行符......)。
答案 2 :(得分:0)
第一个问题,您要将输入与数字进行比较,而不是对输入的字符进行比较。而不是
if (c == 1)
你需要
if (c == '1')
下一个问题是(通常)当您输入'1'
时,您也会按Enter
并在输入中留下newline
。因此,当您阅读 next 响应时,将读取newline
而不是下一个响应。在这个例子中,我通过编写一个函数来获取响应并忽略任何newline
来处理它。另请注意,我已使用int
类型作为键响应,因为这是库函数getchar()
的返回值。
#include <stdio.h>
int getakey(void)
{
int ch;
do {
ch = getchar();
} while (ch == '\n'); // ignores newline
return ch;
}
int main(void)
{
int c, a;
printf ("Welcome in Lorempipsuland.h\n");
printf ("Choose one oh the paths:\n");
printf ("1-Nerd programmer's Rocky Mountains\n");
printf ("2-Olografic Banshee's Lakes\n");
c = getakey();
if (c == '1') {
printf ("You entered in the Nerd programmer's Rocky Mountains\n");
printf ("Oh no, hai incontrato un solitario programmatore infuriato perchè il codice riporta un errore fatale, hai 1000 di salute, vuoi combattere?\n");
printf ("Yes(1) or Not(2)?\n");
a = getakey();
if (a == '1') {
printf ("You decided to fight, PREPARE!\n");
}
else if (a == '2') {
printf ("Coward!, but now go away, we have to walk lot\n");
}
}
else if (c == '2') {
printf ("You entered in Holographic Banshee's lakes\n");
printf ("Oh no, that's an Holographic Banshee!\n");
}
return 0;
}