2015-01-05 2 views
2

Я изо всех сил пытаюсь найти ответ на этот вопрос: я хочу иметь возможность контролировать, если номер кредитной карты (допустим, «378282246310005») выполняет определенные критерии (fe это начинается с номер 3).Ввод чисел внутри массива сразу в C

Я хочу, чтобы иметь возможность вводить целое число сразу, а затем проверять определенные места в числе (например, каждую секунду). Тем не менее, мне удалось поместить их в массив при вводе их один за другим, что раздражает:

int main() 
{ 

    int user_input[5]; 
    int i; 

    for(i=0;i<5;i++) 
    { 
     printf("Credit Card Number Digit %d\n",i+1); 
     scanf("%d",(user_input+i)); 
    } 

    if(user_input[0] == 5) 
     printf("MASTERCARD\n"); 

    else 
     printf("INVALID\n"); 

return 0; 
} 
+1

Я вижу 2 возможных путей: 1/прочитать целое число как число ('% d'), затем шаг через десятилетия (1, 10, 100, 1000 и т.д.) и с использованием оператора по модулю; 2/прочитайте весь номер в виде строки и выполните индивидуальный 'char' внутри этой строки. Последнее, вероятно, проще всего. – Evert

ответ

2

Просто проверьте каждую цифру, как она введена, и игнорируйте любой нечисловой ввод, например.

int main() 
{ 
    int user_input[16]; 
    int digits = 0; 

    while (digits < 16) 
    { 
     int c = getchar();   // get character 
     if (c == EOF) break;  // break on EOF 
     if (isdigit(x))   // if character is numeric 
     {       // convert it to int and append to user_input array 
      user_input[digits++] = c - '0'; 
     }       // (otherwise just ignore it) 
    } 

    if (digits > 0 && user_input[0] == 5) 
    { 
     printf("MASTERCARD\n"); 
    } 
    else 
    { 
     printf("INVALID\n"); 
    } 

    return 0; 
} 
+0

цитаты смешаны, должно быть 'c - '0';' – ryanpattison

+0

Спасибо за ответ, помогает мне много. Тем не менее, я думаю, что это должно быть: «isdigit (c)» – Beikos

+0

@rpattiso: thanks - исправлено. –

0

Я предложил бы сканируя строку в массив char, а затем получить доступ к этой массив. Этот метод включен в этот Wikipedia article, где можно найти следующий код.

#include <stdio.h> 

int main() 
{ 
    char word[20]; 

    if (scanf("%19s", word) == 1) 
     puts(word); 
    return 0; 
} 

отрезала считывает строку в массиве word, которые могут быть доступны подобно тому, как в вашем вопросе. По-видимому, максимальная длина строки может быть задана как параметр в строке формата.

+0

Спасибо за статью. Я прочитаю его, как только у меня будет свободное время. – Beikos

Смежные вопросы