写入文件,在其中将选项卡式输出而不是用空格隔开

时间:2018-11-19 22:58:01

标签: c

我正在开发一个记录学生成绩的程序。用户输入名字,姓氏,学生ID,年级和作业名称。我应该通过制表符而不是空格来分隔来自用户的输入。但是当我执行程序时,txt文件中的输出不正确。

#include <stdio.h>

int main(void){

   FILE *cfPtr; // cfPtr = clients.txt file pointer

// fopen opens file. Exit program if unable to create file
if ((cfPtr = fopen("grades.txt", "w")) == NULL) {
    puts("File could not be opened.");
} 
else {
    puts("Enter the students first & last name, ID, grade, and assignment.");

    puts("Enter EOF to end input.");
    printf("%s", "? ");

    char firstName[30]; // student first name
    char lastName[30]; // student last name
    unsigned int stuID; // student ID
    double grade; // student grade
    char assignment[10]; // student assignment name

    scanf("%5s%5s%d%lf%5s", firstName, lastName, &stuID, &grade, assignment);

    // write first & last name, student ID, grade, and assignment name into file with fprintf

    while(!feof(stdin)) {
        fprintf(cfPtr, "%s\t%s\t%d\t%.2f\t%s\t\n", firstName, lastName, stuID, grade, assignment);
        fflush(cfPtr);
        printf("%s", "? ");
        scanf("%5s%5s%d%lf%5s", firstName, lastName, &stuID, &grade, assignment);
    } // end while

    fclose(cfPtr); // fclose closes file
   } // end else
} // end main

在执行该操作时会发生以下情况:

输入学生的名字和姓氏,ID,等级和作业。

输入EOF以结束输入。

?弗雷迪·克鲁格(Freddy Krueger)1234 22.33 test1

? ? Jason Vorhees 1235 33.00 test1

? ?绿巨人1236 2.95 test1

?蝙蝠侠1237 100.00 test1

? ^ Z

[1] +已停止./seqw


grade.txt文件输出:

Fredd y 0 0.00 ttime

Krueg er 1234 22.33 test1

Jason Vorhe 1234 22.33 test1

es 1235 33 0.00 test1

绿巨人1236 2.95 test1

蝙蝠侠1237 100.00 test1

我在这里做错了什么? ttime是哪里来的?奇怪的是,它如何将姓氏的一部分制表符,并使其成为另一个输入。

1 个答案:

答案 0 :(得分:0)

以下建议的代码:

  1. 干净地编译
  2. 执行所需的功能
  3. 正确检查错误
  4. 通过使用function runTest(e) { e.preventDefault(); . . . return false; } 语句为那些魔术数字赋予有意义的名称来消除“魔术”数字
  5. 可以将调用#define修改为将MAX CHARACTERS修饰符合并为参数列表的一部分,而不是硬编码为格式字符串

现在,建议的代码:

scanf()