求大佬解答,程序编译通过却无法运行

/*大作业:学生成绩统计程序

要求:至少包含如下模块和基本功能

上交内容:程序源代码+程序报告

分数:平时分数的1/10

程序报告内容至少包括:

学生成绩统计程序
成绩输入
数据计算
数据查找
输出成绩
计算学生平均分
计算课程平均分*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 13
#define SIZE 5
//#include"student.h"

struct subject
{
    float Chinese;
    float Math;
    float English;
};

typedef struct Student
{
    char name[SIZE];
    int age;
    char number[LEN];
    struct subject course;
    struct Student *next;
}students;

typedef struct Linked_list
{
    students *head;
    students *last;
}List;

//函数原型

//在链表末尾添加项,输入成绩
//int Add(List *plist);
//删除学生信息
//int Delete(List *plist);
//查找某一学生
//int Search(List *plist);
//计算学生平均成绩,课程平均成绩,输出成绩
//int Compute(List *plist);

//初始化一个链表
void Initializelist(List *plist);
//释放内存
void Release(List *plist);
//得到用户的选择
int get_int(void);
//获取name,number输入
char *Input(char *str,int n);

int main(void)
{
    List *plist;
    Initializelist(plist);

 /*   FILE* fp;
    int space = sizeof(students);
    if((fp = fopen("student.txt","a+b")) == NULL)
    {
        fputs("不能打开该文件!\n",stderr);
        exit(1);
    }
*/
    puts("欢迎来到学生成绩管理系统,");
    printf("1) 录入学生信息             2)删除学生信息\n"
           "3) 查询学生信息             4)计算学生平均成绩,课程平均成绩\n"
           "5) 退出\n");
    printf("请选择你需要的服务:");
//    scanf("%d",&x);

    int x;
    x = get_int();
    while(x != 5)
        switch(x)
        {
            case 1:
                {
                    char input1[SIZE],input2[LEN];
                    char *str;
                    students *prev,*current;
                    prev = (*plist).head;
//                   current = (*plist).head;
//                    prev = (*plist).head;

                    puts("请输入第一个学生的姓名:");
                    str = Input(input1,SIZE);
                    while(str != NULL && input1[0] != '\0')
                    {
                        current = (students*)malloc(sizeof(students));
                        if(current == NULL)
                            exit(2);
                       if((*plist).head == NULL)
                            (*plist).head = current;
                        else
                            prev->next = current;
                        current->next = (*plist).last;
                        strcpy(current->name,input1);
                        puts("学号:");
                        Input(input2,LEN);
                        strcpy(current->number,input2);
                        puts("年龄:");
                        scanf("%d",&current->age);
                        puts("语文成绩:");
                        scanf("%f",&current->course.Chinese);
                        puts("数学成绩:");
                        scanf("%f",&current->course.Math);
                        puts("英语成绩:");
                        scanf("%f",&current->course.English);
                        while(getchar() != '\n')
                            continue;
                        puts("请输入下一个学生的姓名(empty line to stop):");
                        str = Input(input1,SIZE);
                        prev = current;
                    }

                    if((*plist).head == NULL)
                        printf("没有输入!\n");
                    else
                        printf("这是你的学生:\n");
                    current = (*plist).head;
                    while(current != NULL)
                    {
                        printf("Name: %s,Age: %d,Number: %s\n"
                               "Chinese: %.2f,Math: %.2f,English: %.2f\n",
                               current->name,current->age,current->number,
                               current->course.Chinese,current->course.Math,current->course.English);
                        current = current->next;
                    }

                    printf("请选择你需要的服务:");
                    x = get_int();
                }break;
            case 2:
                {
                    char name[SIZE];
                    char *str;
                    students *current,*prev;
                    printf("请输入你想删除的学生姓名:");
                    str = Input(name,SIZE);
//                    Input(name,SIZE);
                    current = (*plist).head;
                    if(str)
                    {
                        while(current != NULL && strcmp(current->name,str) != 0)
                        {
                            prev = current;
                            current = current->next;
                        }
                        if(current == NULL)
                        	printf("不存在该学生!\n");
                        else
						//if(!strcmp(current->name,str))
                        {
                            prev = current->next;
                            free(current);
                            printf("成功删除!\n");
                        }
                    }
                    else
                        printf("异常!\n");

                    printf("请选择你需要的服务:");
                    x = get_int();
                }break;
            case 3:
                {
                    char name[SIZE];
                    char *str;
                    students *current;
//                  students *prev;
                    printf("请输入你想要查询的学生姓名:");
                    str = Input(name,SIZE);
                    current = (*plist).head;
                    if(str)
                    {
                        while(current != NULL && strcmp(current->name,str) != 0)
                            current = current->next;
                        if(current == NULL)
                        	printf("不存在该学生!\n");
//                            break                               //跳出循环回到while的判断步骤,解决方案,if加控制条件 空结束,
                        else
						//if(!strcmp(current->name,str))              //current->name无意义
                        {
                            printf("Name: %s,Age: %d,Number: %s\n"
                               "Chinese: %f,Math: %f,English: %f\n",
                               current->name,current->age,current->number,
                               current->course.Chinese,current->course.Math,current->course.English);
                        }
                    }
                    else
                        printf("异常!\n");

                    printf("请选择你需要的服务:");
                    x = get_int();
                }break;
            case 4:
                {
                    students *current;
                    current = (*plist).head;
                    int cnt = 0;
                    double sum_average = 0.0,Chinese_average = 0.0,Math_average = 0.0,English_average = 0.0;
                    while(current->next != NULL)
                    {
                        sum_average = current->course.Chinese + current->course.Math + current->course.English;
                        Chinese_average += current->course.Chinese;
                        Math_average += current->course.Math;
                        English_average += current->course.English;
//                        current = current->next;
                        cnt++;
                    }
                    sum_average = sum_average/(double)cnt;
                    Chinese_average = Chinese_average/(double)cnt;
                    Math_average = Math_average/(double)cnt;
                    English_average = English_average/(double)cnt;
                    printf("sum_average = %.2f\nChinese_average = %.2f\n"
                           "Math_average = %.2f\nEnglish_average = %.2f\n",sum_average,Chinese_average,
                           Math_average,English_average);

                    printf("请选择你需要的服务:");
                    x = get_int();
                }break;
            default:
                {
                    printf("输入错误!请再次输入:\n");
                    x = get_int();
                }break;
        }
//        x = get_int();
	if((*plist).head != NULL)
    	Release(plist);

    printf("谢谢使用!再见");

    return 0;
}

void Release(List *plist)
{
    students *current;
    current = (*plist).head;
    while(current != NULL)
    {
        free(current);
        current = current->next;
    }
}

void Initializelist(List *plist)
{
    (*plist).head = NULL;
    (*plist).last = NULL;
}
int get_int(void)
{
	int input;
	char ch;

	if(scanf("%d",&input) != 1)
	{
	    puts("这是你错误的输入:");
		while((ch = getchar()) != '\n')
            putchar(ch);
        putchar('\n');
		printf("请只输入一个数字:\n");
	}
	while(getchar() != '\n')
        continue;

	return input;
 }

 char *Input(char *str,int n)
{
    char *ret;
    char *find;

    ret = fgets(str,n,stdin);
    if(ret)
    {
        find = strchr(str,'\n');
        if(find)
            *find = '\0';
        else
            while(getchar() != '\n')
                continue;
    }
    return ret;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现远程控制小车,可以利用ESP8266模块连接WIFI网络,然后通过发送控制指令来控制小车的运动。 以下是一个简单的示例代码,可以通过向ESP8266发送“forward”、“backward”、“left”、“right”等指令来控制小车的前进、后退、左转、右转等动作: ``` #include <ESP8266WiFi.h> // 替换为你的WIFI名称和密码 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; WiFiServer server(80); void setup() { Serial.begin(115200); // 连接WIFI网络 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } // 启动Web服务器 server.begin(); Serial.println("Web server started."); } void loop() { // 等待客户端连接 WiFiClient client = server.available(); if (!client) { return; } // 读取客户端发送的指令 String command = ""; while (client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n') { break; } if (c != '\r') { command += c; } } } Serial.println("Received command: " + command); // 根据指令控制小车 if (command == "forward") { // 前进 } else if (command == "backward") { // 后退 } else if (command == "left") { // 左转 } else if (command == "right") { // 右转 } // 返回响应给客户端 client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<html><body><h1>OK</h1></body></html>"); } ``` 在代码中,ESP8266连接到WIFI网络后启动Web服务器,等待客户端连接并发送指令。当收到指令后,根据指令控制小车的运动。最后,返回一个响应给客户端,表示指令已经执行完成。 需要注意的是,上述代码仅仅是一个简单的示例,还需要根据实际情况进行修改和完善。例如,需要添加小车控制代码、异常处理代码等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值