【问题标题】:i dont understand why output is diffrent when print function value with variable [duplicate]我不明白为什么打印带有变量的函数值时输出不同[重复]
【发布时间】:2019-07-23 08:55:54
【问题描述】:

当我尝试使用 printf 直接打印 getk 函数时。它工作正常。但是当我将它存储到变量时,输出总是相同的。我正在尝试将箭头键作为输入

我在代码块 windows 7 上使用 gcc。

int getk()
{
    int ch;
    ch = getch();
    if (ch == 0)
    {
        ch = getch();
        return ch;
    }
    return ch;
}

void main()
{
    int a, b;
    a = getk();
    printf("%d %d", a, getk());
}

我希望 printf 在这两种情况下都有相同的输出,因为 getk 返回类型和变量 a 数据类型相同,那么为什么输出不同

【问题讨论】:

  • 输入是上箭头键期望两边输出相同但 a= 224 和 getk()=72
  • 你可能会喜欢getch and arrow codes
  • This answer(来自@pmg 提供的链接)准确地解释了发生了什么,以及为什么你会得到你得到的数字。

标签: c getch


【解决方案1】:

在这段代码中sn -p

   a= getk();
   printf("%d %d",a,getk());

函数getk 被调用两次(在assignemnt 语句和printf 调用中)。第二次它可以读取存储在输入缓冲区中的换行符,例如在用户按下之前调用函数中的 Return 键后的换行符。

【讨论】:

  • 不需要换行符,不用回车就可以工作
  • @ManpreetSidhu 我描述了这种情况的常见原因。
  • 请解释在这种情况下会发生什么
  • @ManpreetSidhu 在这种情况下,第一次调用后输入缓冲区可以包含一些数据,在第二次调用中将读取这些数据。
  • 好的先生,非常感谢
【解决方案2】:

根据this的问题,箭头键返回3个字节​​,因此将结果存储在单个变量中是不够的。 所以必须使用数组或者分析字符来获取方向键:

#include <stdio.h>

int main()
{
    int j;
    char Input[3];

    printf("Input: \n\r");

    j = 0;
    char Single = getch();
    while(Single)
    {
        Input[j++] = Single;
        Single = getch();

        if(j > 2)
        {
            j = 0;
        }
    }

    for(int i = 0; i < 3; i++)
    {
        printf("%d", Input[i]);
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多