Я написал программу, которая читает все числа из файла .txt
- она работает нормально. Однако я хотел бы использовать только одну функцию sscanf
в моей программе, считывающую все числа, вместо того, чтобы снова использовать isdigit(*poi)
и sscanf
.
Если я не использую isdigit(*poi)
, я не получу числа, которые были бы в начале строки в файле .txt
.
Как я могу сказать sscanf
продолжать чтение, даже если нет подходящей строки?
Код:
int test(FILE *file, FILE *file2){
int l = 0;
int nc = 0;
char buffer[1000];
char *poi = NULL;
fprintf(file2, "\n");
while(fgets(buffer, 1000, file) != NULL){
poi = buffer;
while(*poi){
if(isdigit(*poi)){
sscanf(poi, "%d%n",&zahl[l].number, &nc);
poi += nc;
fprintf(file2, "%d ", zahl[l].number);
}
if(1 == sscanf(poi, "%*[^0-9]%d%n",&zahl[l].number, &nc)){
poi += nc;
fprintf(file2, "%d ", zahl[l].number);
}
else{
break;
}
l++;
}
fprintf(file2, "\n");
}
return 0;
}
Образец текста в .txt
:
text 2025 text text 25 text text text 1h text
26 text text text text 4,5h.
text text text text 19h
Выходные данные должны быть:
2025 25 1
26 4 5
19
С добавлением будет в порядке:
if(1 == sscanf(poi, "%*[^0-9]%d%n",&zahl[l].number, &nc)){
poi += nc;
fprintf(file2, "%d ", zahl[l].number);
}
Вместо использования:
if(isdigit(*poi)){
sscanf(poi, "%d%n",&zahl[l].number, &nc);
poi += nc;
fprintf(file2, "%d ", zahl[l].number);
}