C中if语句的问题

时间:2015-12-29 16:27:26

标签: c

application/json

我在kali linux终端上遇到问题,因为当终端执行代码时,读取所有if条件直到它到达第一个if,然后终端返回root kali,而不是执行其他如果和否则如果条件。

你能帮我吗?

3 个答案:

答案 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;
}