我正在开发一个记录学生成绩的程序。用户输入名字,姓氏,学生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是哪里来的?奇怪的是,它如何将姓氏的一部分制表符,并使其成为另一个输入。
答案 0 :(得分:0)
以下建议的代码:
function runTest(e) {
e.preventDefault();
.
.
.
return false;
}
语句为那些魔术数字赋予有意义的名称来消除“魔术”数字#define
修改为将MAX CHARACTERS修饰符合并为参数列表的一部分,而不是硬编码为格式字符串现在,建议的代码:
scanf()