Using fscanf to read a string and then a variable number of integers to EOF
我在开始被分配的项目时遇到了一些麻烦。我不能使用字符串运算符,fgets等。我需要将文件扫描到EOF。
这是文件的示例:
1 2 3
| AND 3 2 1
OR 4 5 6
SPECIAL 4 5 6 7 |
我试图做的是设置一个while循环:
1
| while (fscanf(circuit ,"%s", cur_gate ) != EOF ){ |
然后尝试检查cur_gate字符串是什么:
1
| if (cur_gate[0] == 'A'){ |
问题是,我不知道读取字符串后如何扫描3个整数。最终,一旦读取到SPECIAL,我就需要扫描4个整数。
我想将第一个整数存储在名为Output的数组中,并将其余的整数存储在称为INPUT的数组中。
总而言之,我将如何fscanf一个字符串,然后fscanf根据读取的字符串来可变数量的整数?
- 您可以fscanf字符串,然后查看字符串是什么,然后根据字符串是什么读取正确的数字数
-
你尝试了什么?在不询问我们的情况下使用教程自己动手做这是一个好处。你应该得到经典的K
-
根据我对您的问题的理解,以下代码将为您提供帮助。
我假设您只是想将所有输出存储在一个数组中,类似地,将所有输入存储在一个数组中。因此,按照您的示例,您想在输出数组中存储3,4,4(单词后的第一个整数)。其余整数需要转到另一个输入数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_CHAR 256
#define MAX_IN 100
#define MAX_OUT 100
enum
{
FALSE = 0,
TRUE
};
int main ()
{
char word [MAX_CHAR ];
FILE *fp ;
int i = 0, in [MAX_IN ];
int o = 0, out [MAX_OUT ];
int flag = FALSE ;
fp = fopen("dict.txt","r");
if(NULL != fp )
{
while(fscanf(fp ,"%s", word ) != EOF )
{
printf("%s\
",word );
if(0 != isalpha(word [0]))
{
flag = TRUE ;
}
else
{
if(TRUE == flag )
{
out [o ] = atoi(word );
o ++;
flag = FALSE ;
}
else
{
in [i ] = atoi(word );
i ++;
}
}
}
fclose(fp );
}
int j ;
printf("INPUT:");
for(j =0; j <i ; j ++)
{
printf("%d\\t",in [j ]);
}
printf("\
");
printf("OUTPUT:");
for(j =0; j <o ; j ++)
{
printf("%d\\t",out [j ]);
}
printf("\
");
return(0);
} |
输出给定的文件示例
1 2
| INPUT: 2 1 5 6 5 6 7
OUTPUT: 3 4 4 |
免责声明:该代码已在我的环境中进行编译和测试。我鼓励您自己处理错误处理方案。
-
根据我对您的问题的理解,以下代码将为您提供帮助。
我假设您只是想将所有输出存储在一个数组中,类似地,将所有输入存储在一个数组中。因此,按照您的示例,您想在输出数组中存储3,4,4(单词后的第一个整数)。其余整数需要转到另一个输入数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_CHAR 256
#define MAX_IN 100
#define MAX_OUT 100
enum
{
FALSE = 0,
TRUE
};
int main ()
{
char word [MAX_CHAR ];
FILE *fp ;
int i = 0, in [MAX_IN ];
int o = 0, out [MAX_OUT ];
int flag = FALSE ;
fp = fopen("dict.txt","r");
if(NULL != fp )
{
while(fscanf(fp ,"%s", word ) != EOF )
{
printf("%s\
",word );
if(0 != isalpha(word [0]))
{
flag = TRUE ;
}
else
{
if(TRUE == flag )
{
out [o ] = atoi(word );
o ++;
flag = FALSE ;
}
else
{
in [i ] = atoi(word );
i ++;
}
}
}
fclose(fp );
}
int j ;
printf("INPUT:");
for(j =0; j <i ; j ++)
{
printf("%d\\t",in [j ]);
}
printf("\
");
printf("OUTPUT:");
for(j =0; j <o ; j ++)
{
printf("%d\\t",out [j ]);
}
printf("\
");
return(0);
} |
输出给定的文件示例
1 2
| INPUT: 2 1 5 6 5 6 7
OUTPUT: 3 4 4 |
免责声明:该代码已在我的环境中进行编译和测试。我鼓励您自己处理错误处理方案。
-
根据我对您的问题的理解,以下代码将为您提供帮助。
我假设您只是想将所有输出存储在一个数组中,类似地,将所有输入存储在一个数组中。因此,按照您的示例,您想在输出数组中存储3,4,4(单词后的第一个整数)。其余整数需要转到另一个输入数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_CHAR 256
#define MAX_IN 100
#define MAX_OUT 100
enum
{
FALSE = 0,
TRUE
};
int main ()
{
char word [MAX_CHAR ];
FILE *fp ;
int i = 0, in [MAX_IN ];
int o = 0, out [MAX_OUT ];
int flag = FALSE ;
fp = fopen("dict.txt","r");
if(NULL != fp )
{
while(fscanf(fp ,"%s", word ) != EOF )
{
printf("%s\
",word );
if(0 != isalpha(word [0]))
{
flag = TRUE ;
}
else
{
if(TRUE == flag )
{
out [o ] = atoi(word );
o ++;
flag = FALSE ;
}
else
{
in [i ] = atoi(word );
i ++;
}
}
}
fclose(fp );
}
int j ;
printf("INPUT:");
for(j =0; j <i ; j ++)
{
printf("%d\\t",in [j ]);
}
printf("\
");
printf("OUTPUT:");
for(j =0; j <o ; j ++)
{
printf("%d\\t",out [j ]);
}
printf("\
");
return(0);
} |
输出给定的文件示例
1 2
| INPUT: 2 1 5 6 5 6 7
OUTPUT: 3 4 4 |
免责声明:该代码已在我的环境中进行编译和测试。我鼓励您自己处理错误处理方案。
-
根据我对您的问题的理解,以下代码将为您提供帮助。
我假设您只是想将所有输出存储在一个数组中,类似地,将所有输入存储在一个数组中。因此,按照您的示例,您想在输出数组中存储3,4,4(单词后的第一个整数)。其余整数需要转到另一个输入数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_CHAR 256
#define MAX_IN 100
#define MAX_OUT 100
enum
{
FALSE = 0,
TRUE
};
int main ()
{
char word [MAX_CHAR ];
FILE *fp ;
int i = 0, in [MAX_IN ];
int o = 0, out [MAX_OUT ];
int flag = FALSE ;
fp = fopen("dict.txt","r");
if(NULL != fp )
{
while(fscanf(fp ,"%s", word ) != EOF )
{
printf("%s\
",word );
if(0 != isalpha(word [0]))
{
flag = TRUE ;
}
else
{
if(TRUE == flag )
{
out [o ] = atoi(word );
o ++;
flag = FALSE ;
}
else
{
in [i ] = atoi(word );
i ++;
}
}
}
fclose(fp );
}
int j ;
printf("INPUT:");
for(j =0; j <i ; j ++)
{
printf("%d\\t",in [j ]);
}
printf("\
");
printf("OUTPUT:");
for(j =0; j <o ; j ++)
{
printf("%d\\t",out [j ]);
}
printf("\
");
return(0);
} |
输出给定的文件示例
1 2
| INPUT: 2 1 5 6 5 6 7
OUTPUT: 3 4 4 |
免责声明:该代码已在我的环境中进行编译和测试。我鼓励您自己处理错误处理方案。
-
根据我对您的问题的理解,以下代码将为您提供帮助。
我假设您只是想将所有输出存储在一个数组中,类似地,将所有输入存储在一个数组中。因此,按照您的示例,您想在输出数组中存储3,4,4(单词后的第一个整数)。其余整数需要转到另一个输入数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_CHAR 256
#define MAX_IN 100
#define MAX_OUT 100
enum
{
FALSE = 0,
TRUE
};
int main ()
{
char word [MAX_CHAR ];
FILE *fp ;
int i = 0, in [MAX_IN ];
int o = 0, out [MAX_OUT ];
int flag = FALSE ;
fp = fopen("dict.txt","r");
if(NULL != fp )
{
while(fscanf(fp ,"%s", word ) != EOF )
{
printf("%s\
",word );
if(0 != isalpha(word [0]))
{
flag = TRUE ;
}
else
{
if(TRUE == flag )
{
out [o ] = atoi(word );
o ++;
flag = FALSE ;
}
else
{
in [i ] = atoi(word );
i ++;
}
}
}
fclose(fp );
}
int j ;
printf("INPUT:");
for(j =0; j <i ; j ++)
{
printf("%d\\t",in [j ]);
}
printf("\
");
printf("OUTPUT:");
for(j =0; j <o ; j ++)
{
printf("%d\\t",out [j ]);
}
printf("\
");
return(0);
} |
输出给定的文件示例
1 2
| INPUT: 2 1 5 6 5 6 7
OUTPUT: 3 4 4 |
免责声明:该代码已在我的环境中进行编译和测试。我鼓励您自己处理错误处理方案。
根据我对您的问题的理解,以下代码将为您提供帮助。
我假设您只是想将所有输出存储在一个数组中,类似地,将所有输入存储在一个数组中。因此,按照您的示例,您想在输出数组中存储3,4,4(单词后的第一个整数)。其余整数需要转到另一个输入数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_CHAR 256
#define MAX_IN 100
#define MAX_OUT 100
enum
{
FALSE = 0,
TRUE
};
int main ()
{
char word [MAX_CHAR ];
FILE *fp ;
int i = 0, in [MAX_IN ];
int o = 0, out [MAX_OUT ];
int flag = FALSE ;
fp = fopen("dict.txt","r");
if(NULL != fp )
{
while(fscanf(fp ,"%s", word ) != EOF )
{
printf("%s\
",word );
if(0 != isalpha(word [0]))
{
flag = TRUE ;
}
else
{
if(TRUE == flag )
{
out [o ] = atoi(word );
o ++;
flag = FALSE ;
}
else
{
in [i ] = atoi(word );
i ++;
}
}
}
fclose(fp );
}
int j ;
printf("INPUT:");
for(j =0; j <i ; j ++)
{
printf("%d\\t",in [j ]);
}
printf("\
");
printf("OUTPUT:");
for(j =0; j <o ; j ++)
{
printf("%d\\t",out [j ]);
}
printf("\
");
return(0);
} |
输出给定的文件示例
1 2
| INPUT: 2 1 5 6 5 6 7
OUTPUT: 3 4 4 |
免责声明:该代码已在我的环境中进行编译和测试。我鼓励您自己处理错误处理方案。
- 如果对fopen()的调用失败,则代码仍将尝试从数组中打印,但是数组的内容将是垃圾。
-
关于此行:while(fscanf(fp,"%s", word) != EOF)在调用函数:fscanf()时,退出循环的最佳方法是考虑到所有可能的值(在这种情况下)== 1。然后有一个内部循环读取数值。
-
发布的答案无法编译,因为以下语句:#include <ctype.h> is missing, so the isalpha()`函数未原型化
-
@ user3629249。我不确定如何以及为什么,但是我的编译器足够智能,可以编译相同的程序并产生所需的输出,就像我粘贴的一样。
-
当然可以了。并且由于可以使用默认值,所以它甚至可以(大部分)正确运行。但是,如果没有看到任何警告,则表明您未启用警告。对于gcc,至少要使用:-Wall -Wextra -pedantic
-
@ user3629249,是的,我同意.....我通常不加选择地编译张贴在SO上的问题。这就是原因,我没有收到任何警告。谢谢你提醒我。