C语言项目实战想关问题

有谁可以给我介绍一下项目实战的基本步骤啊
比如说头文件包含的是什么,#include应该放在每个源文件的开头,还是只需要放在第一个就可以,又或者是头文件里面,真的有被搞疯掉

头文件其实可以出现在代码的任何地方,甚至结尾。
头文件里可以出现任何合法的代码片段
以上都是基本的概念,是编程里的ABC
你和“项目实战”的阶段还有一段距离,先从基本的学起来吧。

该回答引用gpt
头文件主要包含常量、宏定义、类型声明和函数声明等内容。在C语言中,头文件通常使用 #include 指令进行包含。

一般情况下, #include 应该放在每个源文件的开头,并且应该按照一定的顺序进行包含。推荐的包含顺序如下:

1.系统头文件
2.第三方库头文件
3.本项目中的头文件
这个顺序可以保证系统和库头文件的优先级高于本项目的头文件,避免一些冲突和错误。

在头文件中也可以使用 #include 指令,来包含其他头文件。但是要注意避免递归包含和重复包含的问题,可以使用预处理指令 #ifndef 和 #define 来避免这种情况。

例如:

#ifndef _EXAMPLE_H
#define _EXAMPLE_H

//头文件中的内容

#endif // _EXAMPLE_H

这段代码中,如果宏变量 _EXAMPLE_H 没有被定义,就会执行 ifndef 中的语句,然后定义宏变量,不再执行 ifndef 中的语句。这样可以避免重复包含。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7681449
  • 你也可以参考下这篇文章:C语言设计 第四版 谭浩强 例10.3 从键盘读入若干个字符串,对他们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存(文件输入输出)
  • 您还可以看一下 李飞老师的C语言开发之数据结构与算法一课程中的 链表的插入(优化版本)小节, 巩固相关知识点
  • 除此之外, 这篇博客: C语言基本栈操作之字符串数字分隔与求数据的个数和最值中的 要求编写一个函数,将整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数,存储到一连续的存储空间中,最后输出整数的个数及最大数和最小数。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include <time.h>
    #include <string.h>
    #define MAXSIZE 20
    //从键盘输入一行以“,”分隔的一组整数,求数据的个数,数据的最大值,最小值,并输出。
    //要求编写一个函数,将整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数,
    //存储到一连续的存储空间中,最后输出整数的个数及最大数和最小数。
    //d = atof(op); //不是运算符,就肯定是因数了。所以,用atof函数,将字符串转换为double类型/浮点数   
    
    typedef struct node {		//定义栈结构
    	char data;		// 队列元素类型为char 
    	struct node *next;
    }Stack;
    
    char *Input(char item[MAXSIZE]);  //输入字符数字元素
    double *String_Deal(char item[MAXSIZE], Stack **str); //整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数										 
    void Init_Stack(Stack **s);//建立栈空间,初始化栈
    Stack *Push_Stack(Stack **top, char x);  //入栈
    Stack *Pop_Stack(Stack **top, char x);  //出栈
    void *Output_Stack(Stack *num);  //输出栈元素
    char *Input(char item[MAXSIZE]);  //输入字符数字元素,存放到数组
    void Prt(double figure[]);  //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    
    void main()
    {
    	char arr[MAXSIZE] = {0};  //存放输入的原始字符串
    	Stack *number;   //存放分割后的字符串链表
    	double figure[MAXSIZE];  //用数组存放转换后的数字
    	Input(arr);  //输入字符数字元素
    	Init_Stack(&number);
    	String_Deal(arr, &number);
    	Output_Stack(number);//输出分隔后栈内字符元素
    	//figure[MAXSIZE] = *String_Deal(arr, &number);
    	//Prt(figure); //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    }
    
    //整数字符串分割到一个字符串链表中,然后将字符串链表中存储的整数串转换成整数
    double *String_Deal(char item[MAXSIZE], Stack **result)//item为输入的字符串
    {
    	char *buf = item; //声明buf saveptr两个变量,是strtok_r函数的需要。  
    	char *saveptr = NULL;
    	char *op; //分隔后的每个字符数字或字符符号 
    	Stack *p;  //p指向入栈后的数字字符
    	double ss;
    	//当strtok()在参数buf的字符串中发现参数","中包涵的分割字符时,则会将该字符改为\0 字符。
    	//在第一次调用时,strtok()必需给予参数buf字符串,往后的调用则将分割后的字符参数saveptr设置成buf。
    	//每次调用成功则返回指向被分割出片段的指针。
    		while ((op = strtok_s(buf, ",", &saveptr)) != NULL) //利用strtok_s函数分隔字符串
    	{
    		if (op != NULL)
    		{
    			Push_Stack(result, *op);//数字字符存入栈
    			buf = saveptr;
    		}
    	}
    	printf("字符分隔并进栈成功!正在将字符串链表中存储的整数串转换成整数......\n");
    	p = *result;
    	int j = 0;  //存放数字数组下标,从0开始存放数据
    	double figure[MAXSIZE];
    	while (p->next )
    	{
    		if (p->data >= '0'&&p->data <= '9')
    		{
    			ss = atof(&(p->data));//字符转为浮点数
    			figure[j] = ss;
    			j++;
    			p = p->next;
    			printf("figure[%d]=%3.6f\n", j, figure[j-1]);//输出分隔后的数字(浮点型)
    		}
    		printf("\n");
    	};
    	Prt(figure);  //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    	return figure;
    }
    //建立栈空间,初始化栈
    void Init_Stack(Stack **s)//Stack *Init_Stack(Stack *s,int x)
    {
    	*s = (Stack *)malloc(sizeof(Stack));
    	(*s)->next = NULL;
    }
    
    Stack *Push_Stack(Stack **top, char x)  //入栈
    {
    	Stack *s;
    	int i = 0;
    	s = (Stack *)malloc(sizeof(Stack));
    	s->data = x; s->next = *top; *top = s;
    	return *top;
    }
    
    Stack *Pop_Stack(Stack **top, char x)  //出栈
    {
    	Stack *p;
    	if (top == NULL) return NULL;
    	else
    	{
    		x = (*top)->data ;
    		p = *top;
    		*top = (*top)->next;
    		free(p);//释放内存
    		return *top;
    	}
    }
    
    char *Input(char item[MAXSIZE])  //输入字符数字元素
    {
    	char ch;
    	int i = 0;
    	printf("从键盘输入一行以“,”分隔的一组整数,以'#'结束输入:\n");
    	ch = getchar();
    	while (ch != '#')
    	{
    		item[i] = ch;
    		i++;
    		ch = getchar();
    	}
    	return item;
    }
    void *Output_Stack(Stack *num)  //输出栈元素
    {
    	int y = 0;
    	printf("输出栈内数字元素为(最后一个为结束符):\n");
    	while (num != NULL)
    	{
    		printf("%c  ", num->data);
    		Pop_Stack(&num, y);
    	}
    	printf("\n");
    	return NULL;
    }
    void Prt(double figure[])  //数字元素遍历,求数据的个数,数据的最大值,最小值,并输出
    {
    	int i = 0;
    	if (figure[0] ==NULL)
    	{
    		printf("数组空!\n");
    	}
    	printf("数组存在的元素如下:\n");
    	double min = figure[0], max = figure[0];
    	while (figure[i]>=0)
    	{
    		printf("-->%3.3f ", figure[i]);
    		if (figure[i] <= min) min = figure[i];
    		if (figure[i] >= max) max = figure[i];
    		i++;
    	}
    	printf(" *******结束!\n");
    	printf("***数字个数为%3d个***\n", i);
    	printf("***最大数为:%3f***\n", max);
    	printf("***最小数为:%3f***\n", min);
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^