使用getchar()获取多个值。

我可以以某种方式使用getchar()来运行命令行,直到我点击’\ n’。 假设我想要扫描我输入的所有值,例如。

21 23 1 78 54’\ n’。 我想将所有五个值扫描到一个数组中。 我无法扫描它们。是不是因为每个值之间的间距? 或者是否有我们可以使用的function?

提前致谢

如果您不想使用getchar()那么我使用带有%d转换说明符的scanf有一个简单的解决方案:

 while (i < ARRAY_SIZE && scanf("%d", &a[i]) == 1) i++ ; 

%d转换说明符告诉scanf跳过任何前导空格并读取下一个非数字字符。 返回值是成功转换和分配的数量。 由于我们正在读取单个整数值,因此成功时返回值应为1。

 #include  #include  #include  #include  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; }