从C中的文件中读取混合字符和文字数字

时间:2013-03-15 01:21:21

标签: c scanf

假设我想读入数字1乘以数字4

5000     49     3.14     Z      100
0322     35     9.21     X      60

目前我有,但我只能复制不操纵信息的信息

#include <stdio.h>
#include <stdlib.h>
#define FILE_1 "File1.txt"
#define FILE_2 "File2.txt"
int main (void)
{
    // Local Declarations 
    char score;
    int curCh;
    int count = 0;
    FILE* sp1;
    FILE* sp2;

    if (!(sp1 = fopen (FILE_1, "r"))) //check if file is there
    {
        printf ("\nError opening %s.\n", FILE_1);
        return (1);
    } // if open error 
    if (!(sp2 = fopen (FILE_2, "w")))
    {
        printf ("\nError opening %s.\n", FILE_2);
        return (2);
    } // if open error

    while((curCh = fgetc(sp1)) != EOF)
    {
        printf ("%c", curCh); //copy the contents
            count++;
    } // while 


    return 0;
}

2 个答案:

答案 0 :(得分:1)

同意Randy和Jonathan的评论,你应该使用fgets()来处理整行。如果您已知分隔符(如制表符)和已知列,则可以使用strtok()对分隔符上的行进行标记,然后使用计数来提取所需的值。

除了sscanf(),您可以逃脱atoi()和atof() 成功使用 strtol()< / strong>如下面Randy的评论中所述,并在StackOverflow的其他地方引用:

答案 1 :(得分:0)

将1乘以4很容易:1 * 4

您的意思是“从better_identifier乘以best_identifier,从同一个文件中读取uint64_t个值”?您可以提出的最佳标识符是什么?

您需要这些#include s:

#include <stdio.h>
#include <assert.h>
#include <stdint.h>
#include <inttypes.h>

别忘了对此发表评论:

/*while((curCh = fgetc(sp1)) != EOF)
{
    printf ("%c", curCh); //copy the contents
        count++;
}*/ // Make sure you comment this, because the side-effect of this
    // ... won't allow you to do anything else with sp1, until you
    // ... rewind

顺便说一句,你在读哪本书?

uint64_t better_identifier = 0, best_identifier = 0;
assert(fscanf(sp1, "%"SCNu64" %*d %*g %*c %"SCNu64, &better_identifier, &best_identifier) == 2);
printf("%"PRIu64" * %"PRIu64" = %"PRIu64"\n", better_identifier, best_identifier, better_identifier * best_identifier);

也许您打算使用xy作为标识符。当然,你可以提出比这更好的标识符!

uint64_t x = 0, y = 0;
assert(fscanf(sp2, "%"SCNu64" %*d %*g %*c %"SCNu64, &x, &y) == 2);
printf("%"PRIu64" * %"PRIu64" = %"PRIu64"\n", x, y, x * y);