-1

假设我想读入数字 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;
}
4

2 回答 2

1

同意 Randy 和 Jonathan 的意见,您应该使用 fgets() 来处理整行。如果您知道定界符(如制表符)和已知列,则可以使用 strtok() 在定界符上标记您的行,然后使用计数来提取您想要的值。

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

于 2013-03-15T02:24:39.427 回答
0

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

你的意思是“乘以better_identifierbest_identifieruint64_t同一个文件中读取的值”?您能想到的最佳标识符是什么?

你需要这些#include

#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);

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

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);
于 2013-03-15T02:24:09.210 回答