C 语言中的 Sscanf - 从 .txt 文件中读取数字



我写了一个程序,它正在从.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);
}

我只想在我的程序中使用一个 sscanf 函数

使用返回值sscanf()。 当它不是 1 时,递增poi并在下一个字符处重新扫描。

while(fgets(buffer, 1000, file) != NULL){
poi = buffer;
while(*poi){
int nc = 0; 
int cnt = sscanf(poi, "%d%n", &zahl[l].number, &nc);
if (cnt == 1) {
poi += nc;
fprintf(file2, "%d ", zahl[l].number);
} else {
poi++;
}
}
fprintf(file2, "n");
}

使%[^0-9]%n成为一个单独的sscanf。将nc设置为零,如果此sscanf失败,则将零添加到offset中。
sscanf整数,如果失败,则退出循环。

#include <stdio.h>
int main ( void) {
char *poi = NULL;
char *lines[] = {
"text 2025 text text 25 text text text 1h text"
, "26 text text text text 4,5h."
, "text text text text 19h"};
int value = 0;
int nc = 0;
for ( int each = 0; each < 3; ++each) {
poi = lines[each];
while ( 1) {
nc = 0;
sscanf ( poi, "%*[^0-9]%n", &nc);
poi += nc;
if ( 1 == sscanf ( poi, "%d%n", &value, &nc)) {
printf ( "%d ", value);
poi += nc;
}
else {
break;
}
}
printf ( "n");
}
return 0;
}

处理 - 数字。

#include <stdio.h>
int main ( void) {
char *poi = NULL;
char *lines[] = {
"text 2025 text text 25 text text text 1h text"
, "26 text text text text 4,-5h."
, "text text text text 19h"};
int value = 0;
int nc = 0;
for ( int each = 0; each < 3; ++each) {
poi = lines[each];
while ( 1) {
nc = 0;
sscanf ( poi, "%*[^0-9]%n", &nc);
poi += nc;
if ( poi > lines[each]) {
if ( '-' == *(poi - 1)) {
--poi;
}
}
if ( 1 == sscanf ( poi, "%d%n", &value, &nc)) {
printf ( "%d ", value);
poi += nc;
}
else {
break;
}
}
printf ( "n");
}
return 0;
}

最新更新