用scanf读取int直到新行

时间:2015-07-20 17:21:34

标签: c string int newline scanf

我以前是c语言的新手并且之前使用过java,所以我对某些事情并不熟悉......我想读取一个不确定数量的整数,直到有了新的行。我知道,新行是/ n而且我已经有了一个代码,所以读取整数直到你输入一个字母,但如果有一个新行,它就不会停止。

hh:mm:ss

输入应该是这样的: 23 4 114 2 34 3224 3 2 / n

提前致谢

3 个答案:

答案 0 :(得分:3)

scanf 面向行设计。它的目标是空白分隔输入,其中空格是空格,制表符,\ r或\ n的任意组合。

如果要使用面向行的输入,则应使用fgets在字符串中获取一行,然后使用strtok和sscanf来解析字符串。您的代码可能会变成:

#include <stdio.h>
#include <string.h>

/* maximum size of an input line : adapt to your needs */
#define SIZE 256

int main() {

    int i, numberOfNumbs=0,total=0,value, valsRead;
    float average;
    char line[SIZE], *val;
    char delims[] = " \t\r\n";

    if (fgets(line, SIZE, stdin) == NULL) { /* EOF */
        fprintf(stderr, "No input\n");
        return 1;
    }
    if (line[strlen(line) - 2] != '\n')  {/* line too long */
        fprintf(stderr, "Line too long\n");
        return 2;
    }
    val = strtok(line, delims);
    valsRead = sscanf(val, "%d",&value);

    while(valsRead>0)
    {
        numberOfNumbs++;
        total +=value;
        printf("Read %d\n", value);
        val = strtok(NULL, delims);
        valsRead = (val == NULL) ? 0 : sscanf(val, "%d",&value);
    }

    average=(float)total/(float)numberOfNumbs;
    printf("You read %d values. Average = %f.",numberOfNumbs, average);

    return (0);
}

答案 1 :(得分:1)

如果你想要多个值,那么最好使用数组, 如果您想要输入换行符'\n' <{1}}之前需要值,也需要scanf("%[^\n]", string);

答案 2 :(得分:1)

对于你想要从键盘输入的内容,我建议用

字符串阅读
char string[100];

scanf("%s",string)

然后你可以通过字符串查找数字,例如命令

sscanf(string,"%d",&integer)
这里有一个棘手的问题是,在得到第一个整数之后,你需要找出第一个空格之后你的数字..说它在开始后是n个字符然后你可以重复与

sscanf(string+n,"%d",&integer)

并测试sscanf的值以查看是否正确读入了某些内容。

这不是一个完整的答案,而是建议采用不同的策略。

我从文件中读取这类内容,但在这里你必须要小心,因为对于文件行尾字符可以是ascii代码10,13或者10和13用于unix,mac和msdos格式文件(对不起,我不记得是哪个。