C-上次捕获的数据项未写入文件

时间:2018-10-14 10:37:39

标签: c file save writing

我的程序应该为学生捕获三项数据并将其写入文件; 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();
}  

1 个答案:

答案 0 :(得分:0)

首先,快速了解一下scanf的工作原理:每当调用scanf时,它都会跳过前导空格,读取并存储字符,直到再次遇到空格(“ space”是空格字符)。一旦遇到空白字符,它将返回并在再次调用时考虑其余字符。

现在,查看您的程序,我假设ID不包含任何空格,因此scanf会完全使用它,但是当您的程序准备好接受Name并说您输入“ James Bond”时。该字符串包含空格,因此scanf在&aStudent.Name中存储“ James”并返回。如前所述,下次调用scanf时将存储“ Bond”,因此&aStudent.Course将存储Bond。因此,您的程序永远没有机会存储Course。因此就是结果。