Вы не можете использовать scanf
для чтения ввода, разделенного пробелами, так как scanf
остановит чтение, как только оно достигнет пробела.
scanf("%s", text); //Wrong, always reads only first number.
Вы можете использовать fgets
, затем sscanf
с %n
in loop.
char buf[100];
int *array = NULL;
int numElements = 0;
int numBytes = 0;
if (fgets(buf, sizeof buf, stdin)) {
char *p = buf;
if (1 == sscanf(buf, "%d%n", &numElements,&numBytes)){
p +=numBytes;
array = malloc(sizeof(int)*numElements);
for (int i = 0;i<numElements;i++){
sscanf(p,"%d%n", &array[i],&numBytes);
p +=numBytes;
printf("%d,", array[i]);
}
}
}
%n
возвращает количество прочитанных байтов, таким образом увеличивая количество прочитанных байтов buf
.
Если вы не имеете дело с strings
и непосредственно читаете с stdin
, вам не нужен весь этот беспорядок.
int *array = NULL;
int numElements = 0;
scanf("%d", &numElements);
array = malloc(sizeof(int)*numElements);
for(int i=0;i<numElements;i++)
{
scanf("%d", &array[i]);
printf("%d ", array[i]);
}