Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序中scanf和printf中奇怪的新行问题_C_Printf_Scanf - Fatal编程技术网

C程序中scanf和printf中奇怪的新行问题

C程序中scanf和printf中奇怪的新行问题,c,printf,scanf,C,Printf,Scanf,当我运行这些打印和扫描时,我得到了正确的用户输入,但由于某些原因,这些线条似乎在奇怪的地方中途断裂 我可以通过在每个printf的开头添加\n来修复它,但是每行之间都有一个完整的空间 有办法解决吗 #include <stdio.h> #include <string.h> #include <stdbool.h> struct Student { char id[9]; char name[30]; char emailId[10]

当我运行这些打印和扫描时,我得到了正确的用户输入,但由于某些原因,这些线条似乎在奇怪的地方中途断裂

我可以通过在每个printf的开头添加\n来修复它,但是每行之间都有一个完整的空间

有办法解决吗

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

struct Student
{
    char id[9];
    char name[30];
    char emailId[10];
    char courseId[10];
    char grade[4];
};
FILE *studentFile;

bool exitMenu = false;

void displayMainMenu();
int makeChoice();
void createRecord();
void displayRecord();
void seekRecord();
void updateRecord();
void deleteRecord();

int main()
{
    while(!exitMenu)
    {
        displayMainMenu();
        makeChoice();
    }
    return 0;
}

void displayMainMenu()
{
    printf("\tM A I N  M E N U");
    printf("\n1. Create the Binary File");
    printf("\n2. Display the contents of the file");
    printf("\n3. Seek a specific record");
    printf("\n4. Update the contents of a record");
    printf("\n5. Delete a record for the specific name");
    printf("\n6. Exit");
    printf("\n\n\t Please Enter your choice .... ");
}

int makeChoice()
{
    int choice = 0;
    scanf("%d", &choice);

    switch(choice)
    {
        case 1:
            //Create the Binary File
            createRecord();
            break;
        case 2:
            //Display the contents of the file
            displayRecord();
            break;
        case 3:
            //Seek a specific record
            seekRecord();
            break;
        case 4:
            //Update a record for the specific name
            updateRecord();
            displayRecord();
            break;
        case 5:
            //Delete a record for the specific name
            deleteRecord();
            displayRecord();
            break;
        case 6:
            //Exit
            exitMenu = true;
            break;
        default:
            break;
    }
    return choice;
}

void createRecord()
{
    studentFile = fopen("studentFile.bin","ab");
    int i;
    struct Student student;

    printf("Enter Student ID: ");
    scanf("%s",student.id);

    printf("Enter Student Name: ");
    scanf("%s",student.name);

    printf("Enter Email ID: ");
    scanf("%s",student.emailId);

    printf("Enter Course ID: ");
    scanf("%s",student.courseId);

    printf("Enter Grade: ");
    scanf("%s",student.grade);

    fwrite(&student,sizeof(student),1,studentFile);
    fclose(studentFile);
}

void displayRecord()
{
    studentFile=fopen("studentFile.bin","rb");
    struct Student student;
    while(fread(&student,sizeof(student),1,studentFile))
    {
        printf("\n------------------------------------------\n");
        printf("Student ID: %s",student.id);
        printf("\nStudent Name: %s",student.name);
        printf("\nEmail ID: %s",student.emailId);
        printf("\nCourse ID: %s",student.courseId);
        printf("\nGrade: %s",student.grade);
        printf("\n------------------------------------------\n");
    }
    fclose(studentFile);
}

void seekRecord()
{
    struct Student student;
    char id[9];
    printf("Enter Student ID: ");
    scanf("%s",id);
    studentFile = fopen("studentFile.bin","rb");

    while(fread(&student,sizeof(student),1,studentFile))
    {
        if(strcmp(student.id,id)==0)
        {
            printf("\tStudent Record Found.");
            printf("\n------------------------------------------\n");
            printf("Student ID: %s",&student.id);
            printf("\nStudent Name: %s",&student.name);
            printf("\nEmail ID: %s",&student.emailId);
            printf("\nCourse ID: %s",&student.courseId);
            printf("\nGrade: %s",&student.grade);
            printf("\n------------------------------------------\n");
            break;
        }
    }
}

void updateRecord()
{
    FILE *tempFile;
    char id[9];
    printf("Enter Student ID: ");
    scanf("%s",id);

    studentFile=fopen("studentFile.bin","rb");
    tempFile = fopen("tempFile.bin","wb");

    struct Student student;
    while(fread(&student,sizeof(student),1,studentFile))
    {
        if(strcmp(student.id,id)==0)
        {
            printf("Enter Updated Student ID: ");
            scanf("%s",student.id);

            printf("Enter Updated Student Name: ");
            scanf("%s",student.name);

            printf("Enter Updated Email ID: ");
            scanf("%s",student.emailId);

            printf("Enter Updated Course ID: ");
            scanf("%s",student.courseId);

            printf("Enter Updated Grade: ");
            scanf("%s",student.grade);
            fwrite(&student,sizeof(student),1,tempFile);
        }
        else
        {
            fwrite(&student,sizeof(student),1,tempFile);
        }
    }
    fclose(studentFile);
    fclose(tempFile);
    remove("studentFile.bin");
    rename("tempFile.bin","studentFile.bin");
}

void deleteRecord()
{
    FILE *tempFile;
    struct Student student;
    char name[30];
    printf("Enter Student Name: ");
    scanf("%s",name);
    studentFile = fopen("studentFile.bin","rb");
    tempFile = fopen("tempFile.bin","wb");

    while(fread(&student,sizeof(student),1,studentFile))
    {
        if(strcmp(student.name,name) !=0)
        {
            fwrite(&student,sizeof(student),1,tempFile);
        }
    }

    fclose(studentFile);
    fclose(tempFile);
    remove("studentFile.bin");
    rename("tempFile.bin","studentFile.bin");
}
#包括
#包括
#包括
体类型
{
字符id[9];
字符名[30];
char-emailId[10];
char-courseId[10];
煤焦级[4];
};
档案*学生档案;
bool exitMenu=假;
void displayMainMenu();
int makeChoice();
void createRecord();
void displayRecord();
void seekRecord();
void updateRecord();
作废删除记录();
int main()
{
而(!exitMenu)
{
显示主菜单();
makeChoice();
}
返回0;
}
void displaymain菜单()
{
printf(“\tM A in M E N U”);
printf(“\n1.创建二进制文件”);
printf(“\n2.显示文件内容”);
printf(“\n3.查找特定记录”);
printf(“\n4.更新记录内容”);
printf(“\n5.删除特定名称的记录”);
printf(“\n6.Exit”);
printf(“\n\n\t请输入您的选择…”);
}
int makeChoice()
{
int-choice=0;
scanf(“%d”,选择(&C);
开关(选择)
{
案例1:
//创建二进制文件
createRecord();
打破
案例2:
//显示文件的内容
displayRecord();
打破
案例3:
//寻找特定记录
seekRecord();
打破
案例4:
//更新特定名称的记录
updateRecord();
displayRecord();
打破
案例5:
//删除特定名称的记录
deleteRecord();
displayRecord();
打破
案例6:
//出口
exitMenu=true;
打破
违约:
打破
}
回报选择;
}
void createRecord()
{
studentFile=fopen(“studentFile.bin”、“ab”);
int i;
结构学生;
printf(“输入学生ID:”);
scanf(“%s”,学生id);
printf(“输入学生姓名:”);
scanf(“%s”,学生姓名);
printf(“输入电子邮件ID:”);
scanf(“%s”,student.emailId);
printf(“输入课程ID:”);
scanf(“%s”,student.courseId);
printf(“输入等级:”);
scanf(“%s”,学生成绩);
fwrite(&student,sizeof(student),1,studentFile);
fclose(学生档案);
}
void displayRecord()
{
studentFile=fopen(“studentFile.bin”、“rb”);
结构学生;
while(fread(&student,sizeof(student),1,studentFile))
{
printf(“\n-------------------------------------------\n”);
printf(“学生ID:%s”,Student.ID);
printf(“\n学生名:%s”,学生名);
printf(“\n邮件ID:%s”,student.emailId);
printf(“\n课程ID:%s”,student.courseId);
printf(“\n年级:%s”,学生成绩);
printf(“\n-------------------------------------------\n”);
}
fclose(学生档案);
}
void seekRecord()
{
结构学生;
字符id[9];
printf(“输入学生ID:”);
scanf(“%s”,id);
studentFile=fopen(“studentFile.bin”、“rb”);
while(fread(&student,sizeof(student),1,studentFile))
{
如果(strcmp(学生id,id)==0)
{
printf(“\t找到学生记录”);
printf(“\n-------------------------------------------\n”);
printf(“学生ID:%s”,&Student.ID);
printf(“\n学生姓名:%s,&student.Name”);
printf(“\n邮件ID:%s”,&student.emailId);
printf(“\n课程ID:%s”,&student.courseId);
printf(“\n年级:%s,&student.grade”);
printf(“\n-------------------------------------------\n”);
打破
}
}
}
void updateRecord()
{
文件*临时文件;
字符id[9];
printf(“输入学生ID:”);
scanf(“%s”,id);
studentFile=fopen(“studentFile.bin”、“rb”);
tempFile=fopen(“tempFile.bin”、“wb”);
结构学生;
while(fread(&student,sizeof(student),1,studentFile))
{
如果(strcmp(学生id,id)==0)
{
printf(“输入更新的学生ID:”);
scanf(“%s”,学生id);
printf(“输入更新的学生姓名:”);
scanf(“%s”,学生姓名);
printf(“输入更新的电子邮件ID:”);
scanf(“%s”,student.emailId);
printf(“输入更新的课程ID:”);
scanf(“%s”,student.courseId);
printf(“输入更新等级:”);
scanf(“%s”,学生成绩);
fwrite(&student,sizeof(student),1,tempFile);
}
其他的
{
fwrite(&student,sizeof(student),1,tempFile);
}
}
fclose(学生档案);
fclose(tempFile);
删除(“studentFile.bin”);
重命名(“tempFile.bin”、“studentFile.bin”);
}
作废删除记录()
{
文件*临时文件;
结构学生;
字符名[30];
printf(“输入学生姓名:”);
scanf(“%s”,名称);
studentFile=fopen(“studentFile.bin”、“rb”);
tempFile=fopen(“tempFile.bin”、“wb”);
while(fread(&student,sizeof(student),1,studentFile))
{
if(strcmp(学生姓名)!=0)
{
fwrite(&student,sizeof(student),1,tempFile);
}
}
fclose(学生档案);
fclose(tempFile);
删除(“studentFile.bin”);
重命名(“tempFile.bin”、“studentFile.bin”);
}
这是用C写的,如果有帮助的话,我也在使用C语言。 图片贴在下面显示的是什么


@tadman:
“%s”
本身已经忽略了前导换行符。您确实不想将
“\n”
添加到
scanf()
格式字符串的末尾。使用
%s
而不受任何长度限制与使用
get()
一样糟糕。例如,您应该有
scanf(“%8s”,student.id)可能损坏是由以前的故障造成的