Почему get_long_long ("") печатает 2 раза? - PullRequest
0 голосов
/ 02 ноября 2018

get_long_long("") из кода ниже печатает 2 раза, и я не уверен, почему. Он печатает, Please enter your credit card number...", 2 раза. (Примечание: я не обманываю людей, мы делаем этот проект для класса информатики AP, в основном пишу программу, которая проверяет, является ли карта законной.)

Это не полный код, а только начало, которое спрашивает, у какого провайдера карты он есть, и затем использует эту информацию, чтобы определить, является ли карта законной.

    #include <cs50.h>
    #include <stdio.h>
    #include <string.h>


    char type1[100]; //array used to store and then compare which card is being used
    char visa[25] = "Visa";
    char amex[25] = "Amex";
    char master[25] = "Mastercard";
    long long card;

    int main(void)
    {
        printf("Is your card Visa, Mastercard, or Amex?\n");
        //read the card type then store it in type array
        scanf("%s", type1);


        if (strcmp(type1, master) == 0 || strcmp(type1, visa) == 0 || 
        strcmp(type1, amex) == 0)
        {
            card = get_long_long("Please enter your credit card 
            number\n");
        }
        do
        {
            printf("Is your card Visa, Mastercard, or Amex?\n");
            scanf("%s", type1);
        }
        while (strcmp(type1, master) == 0 || strcmp(type1, visa) == 0 
            || strcmp(type1, amex) != 0);

1 Ответ

0 голосов
/ 02 ноября 2018

Преобразование scanf %s соответствует последовательности символов не-пробела (после пропуска любого начального пробела) и останавливается при обнаружении пробела. Это означает, что любой конечный пробел, такой как символ новой строки в конце строки, остается непрочитанным. Даже не зная внутренности нестандартного get_long_long, я почти уверен, что он сначала встречает символ новой строки и снова спрашивает, поскольку это выглядит идентично тому, что пользователь просто нажимает клавишу ввода, не набирая ничего больше.

...