我正在尝试从标准输入中读取整数值。我有一个内部while循环,可以检测整数序列,以便可以解析具有多个字符的整数。我用换行符分隔缓冲区,因为输入可以在多行中包含整数。
我要处理的代码是:
while (fgets(buf, BUF_SIZE, stdin)) {
strtok(buf, "\n");
for(int i = 0; buf[i] != '\0'; i++) {
size_t j = 0;
if(isdigit(buf[i])) {
while(isdigit(buf[i+(int)j])) {
j++;
}
char *new_str = malloc(j*sizeof(char));
size_t k =0;
while(k < j) {
new_str[k] = buf[i+(int)k];
k++;
}
printf("%s\n", new_str);
free(new_str);
}
}
}
输入可能是:1 9 10 10 11
输出应为:
1
9
10
10
11
我得到的输出是:
1
9
10
0
10
0
11
1
因此,n大于1的输入的每个最后一个字符都会以某种方式被缓冲区读取两次。
我不确定这怎么可能,但无法弄清楚。
发生这种情况是因为您在输入字符串上增加了j
,但是却忘记了与i
一起增长j
。因此,您增大j
并在打印后将其从最后一个值增加i
1,并且i+1
将落入已打印的输入字符串中...
解决方案是这样重新初始化我:
if(isdigit(buf[i])) {
.....
free(new_str);
i = i+j;
}