gpt4 book ai didi

c++ - 在 C++ 中不受控制的循环和函数跳过?

转载 作者:行者123 更新时间:2023-11-28 04:19:18 25 4
gpt4 key购买 nike

我正在尝试将两个用户输入的数字从键盘读取到发现板上。我有用于读取第一个数字的代码,但由于某种原因,当它点击相同的 Keypad();第二次运行它似乎没有调用该函数以允许输入而是它跳过扫描并打印它下面的行如果你按下按钮重新开始它是随机的程序选择,任何可能导致这种情况的想法。我正在 mbeds 在线 Ide 上编译。下面也是代码。

#include <iostream>

#include "mbed.h"
DigitalIn columns[3] = {PB_6, PB_7, PD_0}; // Columns for digital input

DigitalOut rows[4] = {PA_5, PA_1, PA_2, PA_3}; // rows for digital output

DigitalIn startButton(USER_BUTTON);

DigitalOut led1(LED1); // reference LED
int numpad[4][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {-2, 0, -1}}; // keypad

int Total();
int Keypad();
int c = 0;
int Read;
int Num1 = 0;
int SelectOp();
int Oper;

int main() {
while (1) {
if (startButton == 1) {
printf("%s\n\rInput First Number\n\r");
wait(.5);
Keypad();
int First = Num1;
Num1 = 0;

printf("%s\n\r Your first number is ");
printf("%i", First);
printf("%s\n\r Input your second number\n\r");
wait(.5);
Keypad(); // this seems to be getting skipped
int Second = Num1;
Num1 = 0;

printf("%s\n\r Your Second number is ");
printf("%i", Second);

printf("%s\n\rSelect Operator: 1(+), 2(-), 3(*), 4(/)");

Keypad();

Oper = Num1;
}
}
}

int Keypad() {
columns[0].mode(PullUp);
columns[1].mode(PullUp);
columns[2].mode(PullUp);

while (1) {
if (Read == -1) {
return Num1;
}

for (int i = 0; i < 4; i++) {
rows[0] = 1;
rows[1] = 1;
rows[2] = 1;
rows[3] = 1;

rows[i] = 0;
wait(0.01);

for (int j = 0; j < 3; j++) {
if (columns[j] == 0) {
Read = numpad[i][j];

Total();

c++;

if (c == 5) {
c = 0;
}

wait(0.005);
while (columns[j] == 0)
;
}
}
}
}
}

int Total() {
if (Read >= 0) {
Num1 *= 10;
Num1 += Read;
printf("%i\n\r", Num1);

} else {
return Num1;
}
return Num1;
}

最佳答案

当第一次循环通过 Keypad() 时 Read 设置为 -1,当您再次输入 Keypad() 时它仍然是 -1,从而立即返回。

使用一些空间来回应@Scheff 根据变量的预期生命周期确定变量范围的重要性,从而尽可能减少全局变量。

关于c++ - 在 C++ 中不受控制的循环和函数跳过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55833712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com