(注:点击代码块右上角以全屏)
(或者按住句子作复制状,往右拖拉,即可看见过长而不在显示范围的代码)
- 图书馆系统
可多次输入标题,作者,价格。当输入作者时按下回车即为停止输入,此时将打印所有信息。
#include<stdio.h>
#include<string.h>
char* s_gets(char* st, int n);//比较难理解的部分
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 100
struct book {
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
int main(void)
{
struct book library[MAXBKS];
int count = 0;
int index;
printf("plz enter title\n");
printf("plz [enter] at the start of a line to stop.\n");
while (count < MAXBKS && s_gets(library[count].title, MAXTITL) != NULL && library[count].title[0] != '\0')//保证有效输入,保证了有输入不为空、输入开头不为\0
{
printf("enter author.\n");
s_gets(library[count].author, MAXAUTL);
printf("enter value. \n");
scanf_s("%f", &library[count++].value);
while (getchar() != '\n')
continue;
if (count < MAXBKS)
printf("Enter the next title. \n");//结束以后又回到while里面要你输入标题了
}
if (count > 0)//如果输入完了enter以后,前面的while不通过,结束循环,就进入这
{
printf("Here is the list of your books:\n");
for (index = 0; index < count; index++)
printf("%s by %s: $%.2f\n", library[index].title, library[index].author, library[index].value);
}
else
printf("NO\n");
return 0;
}
char* s_gets(char* st, int n)
{
char* ret_val;
char* find;
ret_val = fgets(st, n, stdin);//从键盘里输入n个字符到st字符串里面
if (ret_val)//如果有输入则进入
{
find = strchr(st, '\n');//把st字符串里查找到的\n的位置赋值给find
if (find)//如果找到了
*find = '\0';//把这个位置设置成'\0'(为了保证结尾罢)
else
while (getchar() != '\n')
continue;
}
return ret_val;
}
- 学生成绩统计系统
可读性:低
#include<stdio.h>
#include<string.h>
struct subjectmark
{
char subject[6][20];
float mark[6];
int count;
float average;
};
struct information
{
char name[30];
char StudentID[30];
int age;
char Faculty[30];
struct subjectmark Mark;
};
void Grade(float average)
{
//输出评价
if (average >= 90 && average <= 100)
{
printf("The grade you got is A+");
}
else if (average >= 80 && average < 90)
{
printf("The grade you got is A");
}
else if (average >= 70 && average <= 80)
{
printf("The grade you got is A-");
}
else if (average >= 65 &&average <= 70)
{
printf("The grade you got is B+");
}
else if (average >= 60 &&average <= 65)
{
printf("The grade you got is B");
}
else if (average >= 55 && average <= 60)
{
printf("The grade you got is B-");
}
else if (average >= 50 && average <= 55)
{
printf("The grade you got is C+");
}
else if (average >= 45 && average <= 50)
{
printf("The grade you got is C");
}
else if (average >= 40 &&average <= 45)
{
printf("The grade you got is C-");
}
else
{
printf("The grade you got is D");
}
}
int main()
{
//Welcome
printf("————————————————WELCOME TO STUDENTS GRADE INFORMATION SYSTEM—————————————————\n\n");
//student information
struct information studentA[10];
int people = 0;
for (; people < 10; people++)
{ //个人信息
printf("\n\nPlease enter your Name\n(Enter 0 if you want to stop input)\n");
scanf("%s", &studentA[people].name);
if (studentA[people].name[0] == '0')
break;
printf("Please enter your StudentID \n");
scanf("%s", &studentA[people].StudentID);
printf("Please enter your Age \n");
scanf("%d", &studentA[people].age);
printf("Please enter you Faculty\n");
scanf("%s", &studentA[people].Faculty);
int check;
printf("Do you want to check you information?\n1.Yes\n2.No\n");
scanf("%d", &check);
if (check == 1)
{
printf("Personal information:\n");
printf("Name:%s\nStudentID:%s\nAge:%d\nFaculty:%s\n\n\n", studentA[people].name, studentA[people].StudentID, studentA[people].age, studentA[people].Faculty);
}
//student Marks
printf("Please enter maximum 6 subjects and their corresponding marks\n(Valid marks must be 0-100)\n");
int i = 0;
while (i < 6)
{
printf("\n\nWhat is the NO.%d subject\n(Enter 0 if you want to stop)\n", i + 1);
scanf("%s", &studentA[people].Mark.subject[i]);
if (studentA[people].Mark.subject[i][0] == '0')//"字符串’字符.mfujbkyvuk
{
break;
}
while (1)
{
printf("What is the mark of %s\n", studentA[people].Mark.subject[i]);
scanf("%f", &studentA[people].Mark.mark[i]);
if (studentA[people].Mark.mark[i] < 0 || studentA[people].Mark.mark[i]>100)
{
printf("The mark is invalid.\nPlease enter again\n");
continue;
}
else
{
break;
}
}
i++;
}
//开始打印
printf("The number of subject you entered is %d\n\n", i);
studentA[people].Mark.average = 0;
studentA[people].Mark.count = i;
for (int j = 0; j < i; j++)
{
printf("The marks of %s is %.2f\n", studentA[people].Mark.subject[j], studentA[people].Mark.mark[j]);
studentA[people].Mark.average += studentA[people].Mark.mark[j];
//求平均数
}
studentA[people].Mark.average = studentA[people].Mark.average / i;
Grade(studentA[people].Mark.average);
}
//结束程序打印全部
for (int w = 0; w < people; w++)
{
printf("\n\n—————NO.%d Student—————\n", w + 1);
printf("Name: %s\t Age: %d years old\nStudentID: %s\nFaculty: %s\n", studentA[w].name, studentA[w].age, studentA[w].StudentID, studentA[w].Faculty);
printf("Subject\t Mark\t\n");
for (int z = 0; z < studentA[w].Mark.count; z++)
{
printf("%s\t %.2f\t\n", studentA[w].Mark.subject[z], studentA[w].Mark.mark[z]);
}
printf("Avarage is %.2f\n", studentA[w].Mark.average);
Grade(studentA[w].Mark.average);
}
return 0;
}
Markdown在线编辑的网站:
https://stackedit.io/
P.S.用三个波浪号括住代码块即可(markdown语法)开头波浪~~~后可加语言类型,例如~~~C就是C语言。记得结尾用三波浪对应。
难绷,代码的错误是for循环后面那个分号,居然有个分号,分号仙人