我可以以某种方式使用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 longn"); //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/c++开发分享使用getchar()获取多个值。相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522939.html