我的程序应该为学生捕获三项数据并将其写入文件; ID,名称和课程。
名称和课程包含空格。 它会运行,但是当我检查文件时,只会写入ID和Name。是因为我要捕获数据吗?
我的代码:
#include <stdio.h>
#include <string.h>
struct StudentDetails{
char ID[50];
char Name[50];
char Course[50];
}aStudent;
void capture(){
char ch;
printf("Enter ID: ");
scanf ("%s", &aStudent.ID);
printf("Enter Name: ");
scanf ("%s ", &aStudent.Name);
printf("Enter Course: ");
scanf ("%s ", &aStudent.Course);
ch = getchar();
}
void saveToFile(){
FILE *studentDetails;
studentDetails = fopen("students.txt", "a");
fprintf(studentDetails,"%s\t%s\t%s\n",aStudent.ID, aStudent.Name,aStudent.Course);
fclose(studentDetails);
}
void main(){
capture();
saveToFile();
}
答案 0 :(得分:0)
首先,快速了解一下scanf的工作原理:每当调用scanf时,它都会跳过前导空格,读取并存储字符,直到再次遇到空格(“ space”是空格字符)。一旦遇到空白字符,它将返回并在再次调用时考虑其余字符。
现在,查看您的程序,我假设ID不包含任何空格,因此scanf会完全使用它,但是当您的程序准备好接受Name并说您输入“ James Bond”时。该字符串包含空格,因此scanf在&aStudent.Name中存储“ James”并返回。如前所述,下次调用scanf时将存储“ Bond”,因此&aStudent.Course将存储Bond。因此,您的程序永远没有机会存储Course。因此就是结果。