假设我想读入数字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;
}
答案 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);
也许您打算使用x
和y
作为标识符。当然,你可以提出比这更好的标识符!
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);