我有一个文件并使用fscanf我想只读取整数并忽略字符(如果有的话)。
就像文件一样:
1 2 一个 五 C 6
(即在每一行上只有一个数字或字符......我想忽略有字符的行) 所以我只需要读取整数值。
有人知道怎么做吗?
感谢。
答案 0 :(得分:1)
您是否尝试过正则表达式。
在阅读时,请使用正则表达式过滤器进行检查,然后使用条件语句。如果满足正则表达式(即输入是整数)。然后完成阅读过程,否则转到下一个输入。
答案 1 :(得分:1)
这些数字都是一位数吗?在这种情况下,您可以使用getc逐个字符地读取,使用isdigit查看它是否为数字,如果是,则处理它。
这些数字可以有多个数字吗?在这种情况下,你可以使用类似的东西,但是当你到达一个数字时,用ungetc将它放回到流中,并用fscanf(...,“%d”,......)读取数字。 / p>
我知道通常的建议是逐行读取fgets,然后解析该行的数据,我同意直接来自用户的输入这可能是最好的方法。但是对于阅读这样的文件,我认为它是过度的,而且可以使用更简单的解决方案。
答案 2 :(得分:0)
答案 3 :(得分:0)
我的想法是继续使用char-by-char来查找每个整数。用负标记处理负数(以' - '开头)。
//pseudo-code
int negative = 0;
int curdigit = 0;
char c = '\0';
while((c = getchar())) //pseudo-function, get the next character from the stream (i.e fgetc)
{
if (c >= '0' && c <= '9')
{
curdigit = (c - '0');
if (negative)
curdigit *= -1; //can just do this bitwise, but im lazy.
//do something with the current digit.
negative = 0; //negative cannot persist for more than 1 iteration.
}
else if (c == '-')
{
negative = 1;
}
else { negative = 0; }
}