Я столкнулся с проблемой в сравнении с целочисленным значением в c. Его нельзя сравнивать с помощью оператора '==' - PullRequest
0 голосов
/ 02 апреля 2019

У меня возникла проблема при сравнении целых чисел в c. Обычно значение двух целых можно проверить с помощью оператора '=='. Но я не могу понять, в чем проблема с моим кодом.

  struct customerdata
    {
      int accno;
      char name[40];
      int balance;

    }maxcust[200] = {
                02201002, "Ayush", 90,
                02201000, "Raman", 1000,
                01022001, "Hari", 50,
                02103405, "Kiran", 12
            };
    int checkacc(int acc, char names[])
       {
          int i;
          for(i = 0; i < 200; i++){
              if((strcmp(maxcust[i].name, names) == 0) &&
                               maxcust[i].accno == acc)
                  return 1;
            }

          return 0;
        }

        int main()
        {
           int acc, d, withdraw, amount;
           char checkname[40];
           printf("Enter acc number: ");
           scanf("%d", &acc);
           fflush(stdin);
           printf("Enter username: ");
           scanf("%s", checkname);
           fflush(stdin);
           d =checkacc(acc, checkname);
           if(d == 1)
             {
               printf("Username and acc matched... ");

             }
           else if (d == 0)
                 printf("Wrong acc number or name....");

            return 0;
        }

В этом коде функция checkacc всегда возвращает 0, даже если я ввожу тот же номер акк и имя акк, как указано в struct.

(Извините за мой плохой английский. Надеюсь, вы поймете, о чем я.)

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Проблема заключается в том, что ваша структура инициализируется восьмеричными (base-8) значениями, а не base-10.Когда вы scanf, вы читаете в значении base-10, поэтому сравнение на равенство завершается неудачей.

02201002, "Ayush", 90,
02201000, "Raman", 1000,
01022001, "Hari", 50,
02103405, "Kiran", 12

0 перед числом указывает, что его следует интерпретировать как значение base-8вместо базы-10.Вы можете увидеть свою проблему, если запустите следующую маленькую программу и передадите ее 02201002:

#include <stdio.h>

int main(void)
{
    int number = 02201002;
    printf("number: %d\n", number);

    scanf("%d", &number);
    printf("number: %d\n", number);

    return 0;
}

При выполнении программы это дает:

$ ./octal_test
number: 590338
02201002
number: 2201002
0 голосов
/ 02 апреля 2019

Проблема в том, что ведущие нули в номерах счетов.Они заставляют компилятор интерпретировать их как восьмеричные числа, а не как десятичные.Попробуйте удалить ведущие нули.

struct customerdata
{
    int accno;
    char name[40];
    int balance;
} maxcust[200] = {
    2201002, "Ayush", 90,
    2201000, "Raman", 1000,
    1022001, "Hari", 50,
    2103405, "Kiran", 12
};

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