#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
typedef int Type;
typedef struct vector {
size_t size;
size_t capacity;
Type *array;
} Vector;
Vector *vec_make(void){
Vector *v = malloc(sizeof(*v));
if(v){
v->size = 0;
v->capacity=16;
v->array = malloc(v->capacity * sizeof(Type));
}
return v;
}
void vec_free(Vector *v){
free(v->array);
free(v);
}
void vec_add(Vector *v, Type value){
v->array[v->size++] = value;
if(v->size == v->capacity){
Type *temp;
temp = realloc(v->array, sizeof(Type)*(v->capacity += 16));
if(!temp){
perror("realloc at vec_add");
vec_free(v);
exit(-1);
}
v->array = temp;
}
}
int main(void){
size_t size = snprintf(NULL, 0, "%d", INT_MIN);
char buffer[size+1];
int ch, i = 0;
Vector *v = vec_make();
while(1){
ch=getchar();
if(isspace(ch)){
if(i == 0){
if(ch == '\n')
break;
continue;
}
buffer[i] = 0;
//buffer validate as int => omitted
vec_add(v, atoi(buffer));
if(ch == '\n')
break;
i = 0;
} else {
if(ch == EOF)
break;
buffer[i++] = ch;
if(i == size){
fprintf(stderr, "error : too long\n");
//skip upto delimiter?
i = 0;
}
}
}
//print
for(i = 0; i < v->size; ++i){
if(i)
putchar(',');
printf("%d", v->array[i]);
}
putchar('\n');
vec_free(v);
return 0;
}
Не знаете много о c, но не можете ли вы использовать цикл, чтобы разбить эти значения по пространству или что-то подобное? – Mihai
Почему бы не использовать scanf? –
Попробуйте следующее: 'while ((input = getchar())! = '\ N')'. – Wazaaaap