Справка по вводу строки из эмулятора клавиатуры - PullRequest
0 голосов
/ 04 декабря 2011

Я написал базовый код для проекта. Я нахожусь в точке, я пытаюсь получить вход от RFID-ридера, используя эмулятор клавиатуры. Ниже приведен мой код:

    #include <iostream>
#include <ios>
#include <iomanip>
#include <cmath>

using namespace std;


int main()
{
    char product; //declaring the variable for the switch/case
    int Pay = 0; //Declaring the variable Pay
    int Payment = 0;
    double Total = 0; // Declaring the Final Total variable
    double Subtotal = 0; // Declaring the variable Subtotal
    double Tax = 0; // Declaring the variable Tax
    int m = 0; //counts the amount of times milk is scanned
    int b = 0; //counts the amount of times beer is scanned
    int c = 0; //counts the amount of times candy bar is scanned
    int r = 0; //counts the amount of times rice is scanned


    cout << "Scan the product you desire to purchase: \n";//Asking user to input product purchasing
    cout << "When ready to checkout press the z button.\n\n\n"; //Telling user to press button z to pay

    while(Pay < 1) //Keeps in the loop until pay is increased to 1
    {
        getline(cin, product); //Taking input and assining to the variable product


            if(product == E007C02A55EF918D) 
            {
                cout << "6 pack of Budlight...........$6.49\n"; // If the button b is pushed displays
                Subtotal = Subtotal + Beer; // Calculates the Subtotal and stores it
                Tax = Beer * Taxrate + Tax; // Claculates the total Tax and stores it
                b++;
            }

            else if(product == E007C02A55EF937C)
            {
                cout << "Snickers Bar.................$0.99\n";// If the button c is pusehd displays
                Subtotal = Subtotal + Candy_Bar;
                Tax = Candy_Bar * Taxrate + Tax;
                c++;
            }

            else if(product == E007C02A554A7A8B)
            {
                cout << "1 Gallon of 2% Milk..........$3.99\n";//If the button m is pushed displays
                Subtotal = Subtotal + Milk;
                m++;
            }

            else if(product == E007C02A55CE0766)
            {
                cout << "Box of Brown Rice............$2.79\n";//If the button r is pushed displays
                Subtotal = Subtotal + Rice;
                r++;
            }

            else
            cout << "Invaild product. Please scan a different product.\n";

            if (product == 'z')
            Pay++; //When finished it increases pay to 1 to break the while loop


        Total = Subtotal + Tax; // Claculates the Total

    }

Я использую MSVS 2010 для компиляции этого кода. С этим кодом я не могу скомпилировать, потому что он говорит, что E007C02A55EF918D не определен. E007C02A55EF918D - это серийный номер одного из тегов RFID, который я пытаюсь ввести. Я знаю, что у меня тоже проблемы с функцией getline, но меня больше беспокоит получение серийного номера в качестве ввода.

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

char достаточно велико для одного символа (обычно это 8-битное количество, но не полагайтесь на это).

Таким образом, ваша переменная product может содержать только один символ.

E007C02A55EF918D - это идентификатор (поскольку он начинается с буквы, он не считается числом, а поскольку он не заключен в кавычки, он не интерпретируется как строка).

Если вы хотели, чтобы product и эти серийные номера были 64-разрядными, вам нужно изменить product на достаточно большой, чтобы хранить их (например, uint64_t), и изменить серийные номера в вашем коде. быть числами с префиксом 0x. Вам также придется изменить метод ввода (getline принимает строки, поэтому вам нужно будет преобразовать эту строку в число - см., Например, Как преобразовать число в строку и наоборот в C ++ . ).

if (product == 0xABCD1234)

Если вы поместили оба отступа в строки, объявите product с:

std::string product;

и указать ("") серийные номера. Вам также нужно изменить последний тест на:

if (product == "z")
               ^ ^

Вы не можете сравнить std::string с одним char ('z' - это символ, "z" - это строка в стиле C с нулем в конце).

0 голосов
/ 04 декабря 2011

Попробуйте ввести его в "" и использовать strcmp() вместо ==, например

if (!strcmp("E007C02A55EF937C",product))

или

if (strcmp("E007C02A55EF937C",product)==0)

Надеюсь, это помогло вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...