我正在尝试从标准输入读取整数值。 我有一个检测整数系列的内部 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 输入的每个最后一个字符两次。

我不确定这怎么可能,但无法弄清楚。

#1楼 票数:1 已采纳

发生这种情况是因为您在输入字符串上增加了j但您忘记了将ij一起增加。 所以你增加j并且在你打印它之后,你将从最后一个值增加i 1,并且i+1将落在已经打印的输入字符串内......

解决方案是重新初始化 i :

        if(isdigit(buf[i])) {
          .....
          free(new_str);
          i = i+j;
        }

  ask by FFGH translate from so

未解决问题?本站智能推荐:

3回复

C程序在if/else之后终止,或者在我使用fputs/fgets时重复

我是C语言的新手,并且涉足Objective-C,AppleScript和HTML / CSS。 我确信我的问题很容易解决。 我正在尝试写一些东西,使我可以输入源数据并以某种方式将其排序为输出(在本例中为引用)。 基本上,我想将名称,标题,发布者等保存为变量,并按一定顺序打印。 问题是
4回复

C中的fgets()函数

我知道每个人都告诉我使用 fgets 而不是 get 因为缓冲区溢出。 但是,我对fgets()的第三个参数有点困惑。 据我了解, fgets 依赖于: char* str是我的输入将被存储的位置的ptr。 num是要读取的最大字符数。 但什么是FILE *stream ? 如果我只是提示用户输
2回复

fgets不阻止输入-C

我正在为学校编写程序; 这是我第一次与C合作。 我正在使用fgets读取输入,但有时fgets不会阻塞(将程序陷入无限循环)。 要回答每个人的第一个问题,不,我没有在剩下多余的\\n之前使用scanf,这会导致此问题。 我曾经使用sscanf,但这与fgets关联,因此我认为这不是问题
2回复

fgets()无法在函数中复制[重复]

这个问题在这里已有答案: scanf和fgets有 2个问题的问题 我正在编写一个程序,它使用fgets()扫描一个3字符长的字符串作为出发和到达的机场代码。 当我在其方法之外(在main中)编写语句时,它工作正常,但在内部它不等待输入并将变量留空。
1回复

fgets-考虑空字符

当使用int scanf(const char *format, ...)扫描用户输入时,我会读取比字符串大小少一个字符,因为字符串的最后一个字符必须是空字符\\0 。 但是当我使用char *fgets(char *str, int n, FILE *stream) ,我不知道应该如何指定n 。
2回复

如何在不使用fgets包含换行符的情况下从输入中获取字符串?[重复]

这个问题在这里已有答案: 从fgets()中删除尾随换行符输入 12个答案 我正在尝试在其他地方写一个输入的字符串,并且不知道如何取消作为此字符串的一部分出现的新行,我用stdin和fgets获取。 我试图限制fgets获取的数据量,并限制写入多少数据,但新行仍然存在。
1回复

c-fgets从不返回\\0并导致无限循环

我试图做一个 while 循环,从 stdin 读取一些字符串,但它永远不会结束 现在无论我做什么循环都不会结束,我尝试使用 ctrl+d 和 ctrl+z 但都没有奏效。 这样的循环怎么能结束呢?
1回复

C编程-两次调用fgets()?

在我的C程序中,我调用fgets()两次以获取用户的输入。 但是,在第二次调用fgets() (在函数中)时,它不会等待输入,它只是跳过它就像它甚至没有要求它一样。 这是我的代码(缩短了一点): 该程序将输出如下内容: Type 'C' or 'F': (value) 然后...