我正在上C课程并且面临以下任务:1。加载XCode并启动一个新的C项目。如果您愿意,请删除 来自项目的任何无关代码,以便您离开 只需要运行你的主要功能 项目。 2.提示用户输入两个值 - 第一个是char 'D'或'C'的值。第二个值应该是浮动的 表示金额的点值。 3.输入每个值时,将其记录到文本文件中 以下列格式保存: D,250 \ n C,500 \ n 4.测试您的程序并检查它创建的文本文件 确保它符合要求的格式。 5.编写第二个程序,假设起始平衡 $ 1,000.00并输出已完成的分类帐和期末余额 对于该帐户,添加或减去每个条目 您之前创建的文本文件。标记为“C”的条目 应添加到帐户和标记为“D”的条目 应扣除(减去)。
我已经创建了文件,现在进入第5步,我相信我知道如何从文件中获取第一个字符以检查它是'c'还是'd',但之后我不确定如何从同一行获得数值。我该怎么做呢?到目前为止这是我的代码(我不确定if / else if语句中的内容):
FILE *pFile = fopen("Users/Justin/Desktop/Ledger.txt", "r");
float startingBalance = 1000.00;
char action;
if(pFile != NULL)
{
while(!(feof(pFile)))
{
fgets(action, 1, pFile);
if(action == 'D' || action == 'd')
{
}
else if(action == 'C' || action == 'c')
{
}
else
printf("IO Error: Problem with file");
}
}
return 0;
}
答案 0 :(得分:0)
您的文件按行排列,因此最好按行阅读。它的函数是fgets
,它将一个特定最大长度的整行读入char缓冲区。它保留终止换行符(除非因为最大长度而截断行,但是现在不要处理它)。如果到达文件末尾,fgets
将返回行缓冲区或NULL
。
一旦你有一条线,你必须检查那条线。你的行都有相同的语法,即
<action>, <amount>
所以你可以使用sscanf
,这不是很好但又快又脏。 (例如,scanf
的错误处理是非常基本的,所以一个好的策略是完全忽略格式错误的行。)
你的函数的骨架可能如下所示:
int ledger(const char *fn)
{
FILE *f;
char line[80]; /* char buffer for line */
int lineno = 0; /* for error reporting */
f = fopen(fn, "r");
if (f == NULL) return -1; /* error */
while (fgets(line, sizeof(line), f)) {
char action;
double amount;
int n;
lineno++;
n = sscanf(line, " %c, %lf", &action, &amount);
if (n < 2) {
printf("Skipping badly formatted line %d\n", lineno);
continue;
}
/* Do stuff, e.g. just print */
printf("%c, %16.2f\n", action, amount);
}
fclose(f);
return 0; /* success */
}