我是编程和C语言的新手。我有一些文本文件,其中包含一些随机文本和一个我想查找并保存的整数。文本文件看起来像这样(在这种情况下,我只想保存23,而不是56):
# this is a comment
23
this is some random text
56
这是我的代码:
int *num = malloc(sizeof(int));
*num = fgetc(f);
while(!feof(f)){
*num = fgetc(f);
if(isdigit(*num)){
break;
}
}
if(!isdigit(*num)){
printf("Error: no number found.\n");
free(num);
}
else{
printf("%c\n", *num);
}
我现在有点卡住,我的程序只打印出数字2:/ 非常感谢您的帮助。
答案 0 :(得分:2)
正如@pbn所说,最好使用sscanf
。
但是,如果您真的想要,可以通过一次读取一个字符来做到这一点,但是您需要自己“构建”整数,将字符转换为整数,跟踪自己的情况并用数字乘以10的幂来表示您已经拥有的数字。
类似这样的东西(不是完整的代码,只是为了让您入门):
int c;
int num = 0;
while (c = fgetc(f)) {
if(!isdigit(c)) {
break;
}
num = (num * 10) + (c - '0');
}
c- '0'
部分是将整数的文本表示形式转换为整数本身。 0
是字符48,1
是49,依此类推。
这是假设在带有数字的行上,您只有数字,而不是数字和非数字字符的组合。
此外,请勿使用correlation between two raters。
答案 1 :(得分:1)
一个选项可能是使用getline
和sscanf
函数。我认为文本行不包含数字:
#include <stdio.h>
int main() {
int value, matched = 0;
char *line = NULL;
size_t size;
while(getline(&line, &size, stdin) != -1) {
if ((matched = sscanf(line, "%d", &value)) != 0)
break;
}
if (matched)
printf("value: %d\n", value);
return 0;
}
此部分:
while(getline(&line, &size, stdin) != -1) {
将尝试逐行读取整个流。
下一行使用sscanf
返回值(成功匹配和分配的输入项数)来确定是否找到整数值。如果是这样,它将停止读取流。
答案 2 :(得分:0)
程序中的一种简单方法是,一旦找到数字,就不要停止继续,直到找到下一个“”,“ \ n”,“ \ 0”为止。然后添加Number = Number * 10 +(* num);,将Number定义为全局或其他内容。