如何将 fscanf 中的 char 用作 int
How to use char from fscanf as int
你好,这可能是一个愚蠢的问题,但我无法弄清楚我这个世界! (c)
我正在尝试读取同时包含数字和字母的文件,但我只想在我的编程内容中使用数字。看起来像这样:
t1 stuff 12 123 stuff
t1 stuff 12 123 stuff
t1 stuff 12 123 stuff
t2 stuff 12 123 stuff
t2 stuff 12 123 stuff
t3 stuff 12 123 stuff
t4 stuff 12 123 stuff
t4 stuff 12 123 stuff
t4 stuff 12 123 stuff
t33 stuff 12 123 stuff
(它一直这样做到 t33 我只是从 t4 跳到 t33 以避免大列表)
我的做法是:
Struct name {
char t_numbers
etc..
和:
info(struct name*stuff) {
FILE *data;
data= fopen("thefilename", "r");
int i=0;
while (fscanf(file, "%s %s %d %d %s\n",stuff[i].t_numbers, etc etc...) == 5)
...
现在我尝试首先将 t_numbers 作为 int 和 t%d 而不是 char,但是由于文件中的 "T" 它只能作为 char 然后是 s%。
问题是,如何将 stuff[i].t_numbers 用作 int 而不是指针?所以它使用数字而不是其中的 "T" 。
示例:
while (k<=10) {
while (stuff[i].t_numbers==n) {
ofc 将不起作用,因为它是一个与 int 进行比较的指针。但是如何让它发挥作用呢?如何在没有 "T" 的情况下使用这些数据,所以我可以做到这一点。
如果这是一个愚蠢的问题或者已经有人问过(到处搜索),我感到非常抱歉。我对此完全陌生。
(代码可能有拼写错误等,因为它只是一个快速草稿)
你关于 t_numbers
不能成为 int
因为你不能使用 "T%d"
作为格式字符串的说法是正确的但具有误导性;如果您使用了正确的字符串,"t%d"
,它工作得很好。
据我了解,您只需要来自 t1、t2、t3 的数字...
我有一个简单的解决办法。只有在开头有一个字符时才有效。
更改您的代码以读取 int 前的一个字符,如下所示。
info(struct name*stuff) {
FILE *data;
data= fopen("thefilename", "r");
int i=0;
char dummyT = 0;
while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) == 5)
info(struct name*stuff) {
FILE *data;
data= fopen("thefilename", "r");
int i=0;
char dummyT = 0;
while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) ==
不应该用数据替换文件吗?
此外,您的 while 循环看起来正在检查是否 fscanf returns 5,可能想要检查您的文件是否在末尾,或者如果可能的话,保留一个计数器以循环到 33(如果允许的话),最后在您的名字中structure 如果你想使用 %s,你需要制作 t_numbers 一个数组,这应该可以工作
你好,这可能是一个愚蠢的问题,但我无法弄清楚我这个世界! (c)
我正在尝试读取同时包含数字和字母的文件,但我只想在我的编程内容中使用数字。看起来像这样:
t1 stuff 12 123 stuff
t1 stuff 12 123 stuff
t1 stuff 12 123 stuff
t2 stuff 12 123 stuff
t2 stuff 12 123 stuff
t3 stuff 12 123 stuff
t4 stuff 12 123 stuff
t4 stuff 12 123 stuff
t4 stuff 12 123 stuff
t33 stuff 12 123 stuff
(它一直这样做到 t33 我只是从 t4 跳到 t33 以避免大列表)
我的做法是:
Struct name {
char t_numbers
etc..
和:
info(struct name*stuff) {
FILE *data;
data= fopen("thefilename", "r");
int i=0;
while (fscanf(file, "%s %s %d %d %s\n",stuff[i].t_numbers, etc etc...) == 5)
...
现在我尝试首先将 t_numbers 作为 int 和 t%d 而不是 char,但是由于文件中的 "T" 它只能作为 char 然后是 s%。
问题是,如何将 stuff[i].t_numbers 用作 int 而不是指针?所以它使用数字而不是其中的 "T" 。
示例:
while (k<=10) {
while (stuff[i].t_numbers==n) {
ofc 将不起作用,因为它是一个与 int 进行比较的指针。但是如何让它发挥作用呢?如何在没有 "T" 的情况下使用这些数据,所以我可以做到这一点。
如果这是一个愚蠢的问题或者已经有人问过(到处搜索),我感到非常抱歉。我对此完全陌生。
(代码可能有拼写错误等,因为它只是一个快速草稿)
你关于 t_numbers
不能成为 int
因为你不能使用 "T%d"
作为格式字符串的说法是正确的但具有误导性;如果您使用了正确的字符串,"t%d"
,它工作得很好。
据我了解,您只需要来自 t1、t2、t3 的数字...
我有一个简单的解决办法。只有在开头有一个字符时才有效。
更改您的代码以读取 int 前的一个字符,如下所示。
info(struct name*stuff) {
FILE *data;
data= fopen("thefilename", "r");
int i=0;
char dummyT = 0;
while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) == 5)
info(struct name*stuff) {
FILE *data;
data= fopen("thefilename", "r");
int i=0;
char dummyT = 0;
while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) ==
不应该用数据替换文件吗? 此外,您的 while 循环看起来正在检查是否 fscanf returns 5,可能想要检查您的文件是否在末尾,或者如果可能的话,保留一个计数器以循环到 33(如果允许的话),最后在您的名字中structure 如果你想使用 %s,你需要制作 t_numbers 一个数组,这应该可以工作