2015-12-03 2 views
0

Я пытаюсь ввести вход в массив через scanf(). 1-й и 2-й звонки scanf(), похоже, работают так, как я ожидаю. Остальные два не работают, и я не могу понять, почему. Может ли кто-нибудь указать на проблему?3rd и 4th scanf не принимает вход

Вот мой код:

#include <stdio.h> 

#define SIZE_A (10) 
#define SIZE_B (10) 
#define SIZE_C (SIZE_A+SIZE_B) 

int main() 
{ 
    int A[SIZE_A] = {0}, B[SIZE_B] = {0}; 
    int A_input = 0, B_input = 0; 

    printf("First series length:\n"); 
    scanf("%d", &A_input); 
    printf("Enter %d numbers for first series:\n", A_input); 
    scanf("%d %d %d %d %d %d %d %d %d %d", &A[0], &A[1], &A[2], &A[3], &A[4], 
      &A[5], &A[6], &A[7], &A[8], &A[9]); 
    { 
     printf("Second series length:\n"); 
     scanf("%d",&B_input); /* problem here */ 
     printf("Enter %d numbers for second series:\n", B_input); 
     scanf("%d %d %d %d %d %d %d %d %d %d", &B[0], &B[1], &B[2], &B[3], &B[4], 
       &B[5], &B[6], &B[7], &B[8], &B[9]); /* problem here */ 
    } 

    return 0; 
} 
+3

Эээ ... почему вы просили длины серии, а затем полностью игнорировали их? Вы не можете отменить любые неиспользуемые поля ввода, первая запись серии не будет удовлетворена, пока вы не введете 10 значений. Бесполезно нажимать 'enter' после 5 записей и думать, что код перейдет ко второй серии. 'enter' - это просто пробел, как' space' и т. д. –

+0

вначале, я думал, что буду использовать их для определения размера массива, потому что я видел, что он должен быть const больным использовать его позже для остальной части кода – lior

+2

Просьба описать поведение вашей программы более конкретно, чем «она не делает», т работы ". В частности, каков был конкретный вклад и каково наблюдаемое поведение вашей программы для этих ресурсов? – kaylum

ответ

1

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

#include <stdio.h> 
#include <stdlib.h> 

#define SIZE_A (10) 
#define SIZE_B (10) 
#define SIZE_C (SIZE_A+SIZE_B) 

int main() 
{ 
    int A[SIZE_A] = {0}, B[SIZE_B] = {0}; 
    int A_input = 0, B_input = 0; 
    int i; 

    printf("First series length:\n"); 
    if (scanf("%d", &A_input) != 1) 
     exit(1); 
    if (A_input < 1 || A_input > SIZE_A) 
     exit(1); 
    printf("Enter %d numbers for first series:\n", A_input); 
    for (i=0; i<A_input; i++) 
     if (scanf("%d", &A[i]) != 1) 
      exit(1); 

    printf("Second series length:\n"); 
    if (scanf("%d", &B_input) != 1) 
     exit(1); 
    if (B_input < 1 || B_input > SIZE_B) 
     exit(1); 
    printf("Enter %d numbers for second series:\n", B_input); 
    for (i=0; i<B_input; i++) 
     if (scanf("%d", &B[i]) != 1) 
      exit(1); 

    return 0; 
} 

Программа сессии:

First series length: 
3 
Enter 3 numbers for first series: 
1 2 3 
Second series length: 
4 
Enter 4 numbers for second series: 
7 8 9 10 
+0

Я еще не решил ваш дополнительный вопрос, размещенный в комментарии о объединении двух массивов. Пожалуйста, попробуйте сами. –

+0

Thx Weather, но есть причина, по которой я не использовал цикл для сканирования ввода. вход для каждой серии должен быть в одной строке, например: 10 20 30 40 ... когда я использую цикл, он непрерывно запрашивает ввод. Я надеюсь, что моя проблема теперь ясна и OFC, пожалуйста, мне не нужно это делать сам, просто этот шаг для меня - проблема, получая вход так, как они этого хотят. – lior

+0

@lior не имеет значения, все ли входы на одной линии с пространством между ними или отдельными линиями с новой линией между ними - все это пробелы. Вам потребуется только «enter» после последней записи каждой серии. Попробуйте. –

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