这个应该怎么处理,忙活一天,发现自己弄的代码运行不出来,应该怎么解决啊,刚学c还不太熟练,有很多不懂的地方
#include <stdio.h>
#include <stdlib.h>
int main()
{
int score;
printf("请输入成绩:\n");
scanf("%d",&score);
if(score >= 90){
printf("成绩优秀\n");
}
else if(score > 75 && score <= 90){
printf("成绩良好\n");
}
else if(score >= 60 && score <= 75){
printf("成绩及格\n");
}
else if(score > 40 && score <60){
printf("不及格\n");
}
else{
printf("很差劲啊,退学吧\n");
}
system("color 2");
system("pause");
return 0;
}
第3段代码是if-else多条件循环语句的升级版,意思是老师输入考生考试成绩,并判断该考生处于什么样的学习水平。IT男超哥的思考方式如下:定义一个分数变量,然后用户输入学生成绩,电脑去扫描用户输入的成绩,如果学生成绩大于等于90的时候,那么该生成绩优秀;如果学生成绩在75到90分,说明该生成绩良好,如果学生成绩在60~75之间,说明该生成绩合格,如果学生成绩在40~60之间,说明该生成绩不合格,否则小于40分的时候,说明该生成绩很差劲,退学吧!对话框输出的背景是黑色的,文字是绿色的,对话框会在用户的面前显示。
程序运行结果截图:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int data;
printf("请输入一个整数:\n");
scanf("%d",&data);
switch(data){
case 0:
printf("你输入了一个0\n");
break;
case 1:
printf("你输入了一个1\n");
break;
case 2:
printf("你输入了一个2\n");
break;
case 3:
printf("你输入了一个3\n");
break;
case 4:
printf("你输入了一个4\n");
break;
default:
printf("请输入0-4中的任意整数\n");
}
system("color 2");
system("pause");
return 0;
}
第4段代码是Switch-case语句的案例。Switch语句是一个程序运行的判断条件,case是该条件下的不同情况,例如这段代码是当用户输入整数之后,12345……通过用户输入的整数来判断用户输入的数字范围在哪一块,程序大体的框架是,用户先定义一个数字变量,然后通过 printf函数输入任意一个整数,scanf函数来扫描数据获得数据的值,此时,switch语句来判断用户输入的整数,因为用户输入的整数范围是01234这几种情况,如果用户输入的不是01234,那么对话框给用户提示,请输入0~4的任意整数。
Switch和case语句语法结构是这样的,switch判断条件真假的开关,case是该条件下的一些情况,需要注意在case语句下要输入break,如果不输入break的话,程序会存在问题,输入任意一个数字,它永远执行的是第1个,所以在第1个条件判断处要输入break,后面的判断条件类似,因为break语法作用是中途中止某一段程序运行。
程序运行结果截图:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int data;
printf("请输入一个整数:\n");
scanf("%d",&data);
switch(data){
case 0:
case 1:
case 2:
case 3:
printf("你输入了一个0-3范围内的数\n");
break;
case 4:
printf("你输入了一个4\n");
break;
default:
printf("请输入0-4中的任意整数\n");
break;
}
system("color 2");
system("pause");
return 0;
}
所谓case语句的另一个变形方式是这样的,用户输入0~3之间的数,做一个统一的条件判断,此时对话框会提示用户输入的是一个0~3范围之内的数,当用户输入整数4,对话框会出现用户输入的数字,此外,default语句是判断语法逻辑错误的,如果说。用户输入除0~4以外的数,那么对话框会提示用户要输入0~4之间的任意整数。
同样,这里用system函数改变对话框的文字颜色。
程序运行结果截图:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a;//定义为钱的数量
int b;//定义为房子的数量
printf("Please input some money:\n");
scanf("%d",&a);
printf("请输入你的房子套数:\n");
scanf("%d",&b);
if (a >= 100)
{
if(b <= 2)
{
printf("你有钱,但是房子数量不够,我们不合适。\n");
}
else
{
printf("我可以jia给你。\n");
}
}else
{
printf("gun!\n");
}
system("pause");
return 0;
}
该段代码总觉得适合看,不适合解释,不过这样的代码框架搭建得非常沃野,值得学习,可以移植嫁接到其他情境当中。本段代码主要是if-else的嵌套循环。
程序运行结果截图:
对于该问题,我无法给出具体的解决方案,因为缺少相关代码和错误信息。但是,从问题描述来看,可能是存储文件的代码出现了问题。可以检查是否正确打开文件、是否使用了正确的文件名、是否使用正确的写入方式等等。另外,也可以考虑使用调试工具来帮助定位问题所在。
建议把代码贴上来,图片太小了,看的太累了。
先把代码整理了,明天再看。
代码整体修改完善如下,改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#define LEN sizeof(struct book)
#define FORMAT "%-20d %-20s %-20s %-20s %-20s %-20s %-13.2f\n"
#define DATA bk[i].num,bk[i].bname,bk[i].aname,bk[i].Cnum,bk[i].unit,bk[i].time,bk[i].price
struct book { //10
int num; //登录号
char bname[20]; //书名
char aname[20]; //作者名
char Cnum[10]; //分类号
char unit[20]; //单位
char time[20]; //出版时间
float price; //价格 //float price[10] 修改
};
struct book bk[50];
// --函数声明
void input();
void search();
void modify();
void del();
void show(int m = 0); // 修改
// 定义菜单功能
void menu()
{
system("cls"); //30
printf("\t\t|-------------图书管理系统----------|\n");
printf("\t\t| |\n");
printf("\t\t|\t 0. 退出系统\t\t\t|\n");
printf("\t\t|\t 1. 录入图书记录\t\t\t|\n");
printf("\t\t|\t 2. 查找图书记录\t\t\t|\n");
printf("\t\t|\t 3. 删除图书记录\t\t\t|\n");
printf("\t\t|\t 4. 修改图书记录\t\t\t|\n");
printf("\t\t|\t 5. 记录图书排序\t\t\t|\n");
printf("\t\t|\t 6. 显示图书记录\t\t\t|\n");
printf("\t\t|---------------------------------------|\n\n");
printf("\t\t请输入您的操作(0-6):");
}
// 录入图书信息
void input()
{
int i, m = 0, flg;
char ch[2];
FILE* fp;
if ((fp = fopen("bkData.txt", "rb")) == NULL) //fopen("bkData", "a+") 修改
{
printf("打开文件失败\n");
//return; //50 修改
}
else { // 修改
while (1) //while (!feof(fp)) 修改
{
if (fread(&bk[m], LEN, 1, fp) == 1)
m++; /*统计当前记录条数*/
else
break;
}
fclose(fp);
}// 修改
if (m == 0)
printf("没有数据!\n");
else {
system("cls");
show(m); // 修改
}
printf("是否要录入新信息,请确认(y/n):");
scanf("%s", ch);
getchar();
while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0) /*判断是否要录入新信息*/
{
do { //修改
printf("登录号:");
scanf("%d", &bk[m].num);
for (i = 0, flg = 1; flg && i < m; i++)
if (bk[i].num == bk[m].num) //80
{
printf("登录号已存在,请重新输入");
flg = 0;
}
} while (!flg); //修改
printf("图书名:");
scanf("%s", bk[m].bname); //scanf("%s", &bk[m].bname); 修改
getchar();
printf("作者名:"); //90
scanf("%s", bk[m].aname);//scanf("%s", &bk[m].aname); 修改
getchar();
printf("分类号:");
scanf("%s", bk[m].Cnum); //scanf("%s", &bk[m].Cnum); 修改
getchar();
printf("出版单位:");
scanf("%s", bk[m].unit);//scanf("%s", &bk[m].unit); 修改
getchar();
printf("出版时间:");
scanf("%s", bk[m].time); // scanf("%s", &bk[m].time); 修改
getchar();
printf("价格:");
scanf("%f", &bk[m].price);
m++;
printf("是否继续?(y/n):"); /*询问是否继续*/
scanf("%s", ch);
getchar();
}
if (m) {
if ((fp = fopen("bkData.txt", "wb")) == NULL)
{
printf("打开文件失败\n");
return;
}
for (i = 0; i < m; i++)
{
fwrite(&bk[i], LEN, 1, fp); /*向指定的磁盘文件写入信息*/
}
fclose(fp);
}
printf("操作成功!\n");
}
// 查找图书信息
void search()
{
FILE* fp;
int bnum, i, m = 0;
char ch[2]; //120
if ((fp = fopen("bkData.txt", "rb")) == NULL)
{
printf("打开文件失败");
return;
}
while (1) // 修改
{
if (fread(&bk[m], LEN, 1, fp) == 1)
m++; /*统计当前记录条数*/
else // 修改
break;
}
fclose(fp);
if (m == 0) //130
{
printf("文件无记录\n");
return;
}
printf("请输入需要查找的图书的登录号");//135
scanf("%d", &bnum); //136
for (i = 0; i < m; i++)
if (bnum == bk[i].num) // 查找输入的登录号是否在记录中
{
printf("图书数据已找到,确认显示?(y/n)");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf(" 登录号 书名 作者名 分类号 单位 出版时间 价格\t\n");
printf(FORMAT, DATA); /*将查找出的结果按指定格式输出*/
break;
}
}
if (i == m)
printf("查找失败!\n"); /*未找到要查找的信息*/
}
// 删除图书信息
void del()
{
FILE* fp;
int bnum, i, j, m = 0;
char ch[2];
if ((fp = fopen("bkData.txt", "rb")) == NULL)
{
printf("打开文件失败\n");
return;
}
while (1) // 修改
{
if (fread(&bk[m], LEN, 1, fp) == 1)
m++; /*统计当前记录条数*/
else // 修改
break;
}
fclose(fp);
if (m == 0)
{
printf("文件无记录!\n");
return;
}
show(m); /*显示已有数据*/
printf("请输入需要删除的图书登录号:");
scanf("%d", &bnum);
for (i = 0; i < m; i++)
{
if (bnum == bk[i].num) /*查找到输入的登录号*/
{
printf("数据已找到,是否确认删除?(y/n)");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0) /*判断是否要进行删除*/
{
for (j = i; j < m - 1; j++); // 修改
bk[j] = bk[j + 1];
m--; /*记录的总个数减1*/
if ((fp = fopen("bkData.txt", "wb")) == NULL)
{
printf("打开文件失败\n");
return;
}
for (j = 0; j < m; j++)/*将更改后的记录重新写入指定的磁盘文件中*/
if (fwrite(&bk[j], LEN, 1, fp) != 1)
{
printf("对不起,保存失败!\n");
getch(); /*程序暂停*/
}
fclose(fp);
printf("删除成功!\n");
return;
} //200
else /*用户输入的字符不是y或Y,表示取消删除*/
{
printf("取消删除!\n");
return;
}
}
}
printf("没有找到要删除的信息!\n");
}
// 修改图书信息
void modify()
{
FILE* fp;
int i, j, m = 0, bnum;
if ((fp = fopen("bkData.txt", "rb")) == NULL)
{
printf("打开文件失败\n");
return;
}
while (1) // 修改
{
if (fread(&bk[m], LEN, 1, fp) == 1)
m++; /*统计当前记录条数*/
else // 修改
break;
}
fclose(fp);
if (m == 0)
{
printf("文件无记录!\n");
return;
}
show(m);
printf("请输入你要修改的图书的登录号是:\n");
scanf("%d", &bnum);
for (i = 0; i < m; i++)
{
if (bnum == bk[i].num) /*检索记录中是否有要修改的信息*/
{
printf("图书数据已找到,请修改!\n");
printf("书 名:");
scanf("%s", bk[i].bname); /*输入名字*/
getchar();
printf("作者名:");
scanf("%s", bk[i].aname); //scanf("%s", &bk[m].aname);
getchar();
printf("分类号:");
scanf("%s", bk[i].Cnum); //scanf("%s", &bk[m].Cnum);
getchar();
printf("出版单位:");
scanf("%s", bk[i].unit); //scanf("%s", &bk[m].unit);
getchar();
printf("出版时间:");
scanf("%s", bk[i].time); //scanf("%s", &bk[m].time);
getchar();
printf("价格:");
scanf("%f", &bk[i].price);
printf("modify successful!"); // 248
if ((fp = fopen("bkData.txt", "wb")) == NULL)
{
printf("打开文件失败\n");
return;
}
for (j = 0; j < m; j++) /*将新修改的信息写入指定的磁盘文件中*/
if (fwrite(&bk[j], LEN, 1, fp) != 1)
{
printf("保存失败!");
getch();
}
fclose(fp);
return;
}
}
printf("没有找到匹配信息!\n");
}
void show(int m)
{
FILE* fp;
int i;
if (!m) { // 修改
if ((fp = fopen("bkData.txt", "rb")) == NULL)
printf("文件打开失败!\n");
else {
while (1) //while (!feof(fp))
{
if (fread(&bk[m], LEN, 1, fp) == 1)
m++;
else
break;
}
fclose(fp);
}
}
if (m) { // 修改
printf(" 登录号 书名 作者名 分类号 单位 出版时间 价格\t\n");
for (i = 0; i < m; i++)
printf(FORMAT, DATA); /*将学生信息按指定格式打印*/
}
else
printf("文件无记录!\n"); //修改
}
void order() //排序
{
FILE* fp;
struct book t;
int i = 0, j = 0, m = 0;
if ((fp = fopen("bkData.txt", "rb")) == NULL) //if ((fp = fopen("bkData.txt", "r+"))
{
printf("打开文件失败!\n");
return;
}
while (1) // 修改
{
if (fread(&bk[m], LEN, 1, fp) == 1)
m++; /*统计当前记录条数*/
else // 修改
break;
}
fclose(fp);
if (m == 0)
{
printf("无记录!\n");
return;
}
for (i = 0; i < m - 1; i++)
for (j = i + 1; j < m; j++) /*双重循环实现成绩比较并交换*/
if (strcmp(bk[i].Cnum, bk[j].Cnum) < 0) //if (bk[i].Cnum < bk[j].Cnum) 修改
{
t = bk[i]; bk[i] = bk[j]; bk[j] = t;
}
if ((fp = fopen("bkData.txt", "wb")) == NULL)
{
printf("打开文件失败\n");
}
else {
for (j = 0; j < m; j++) /*将新修改的信息写入指定的磁盘文件中*/
if (fwrite(&bk[j], LEN, 1, fp) != 1)
printf("保存失败!");
fclose(fp);
printf("排序成功!\n");
}
}
// 主函数
int main()
{
int n;
menu();
scanf("%d", &n);
while (n)
{
switch (n) {
case 0: exit(0);
case 1: input(); break;
case 2: search();break;
case 3: del(); break;
case 4: modify();break; /*修改记录功能函数调用*/
case 5: order(); break; /*删除记录功能函数调用*/
case 6: show(); break;
}
getch();
menu();
scanf("%d", &n);
}
return 0;
}