周报五:学生管理系统时的问题

1. 缓存区问题

字符串输入有个什么问题,有个字符跳过现象,当你输入完一个数字是,再一次输入时他会存在跳过,会导致输入有问题,清空缓冲区。fflush(stdin)

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int iNum;
	char cNum;
	printf("input iNum:");
	scanf("%d", &iNum);
	printf("iNum = %d\n", iNum);
	
	printf("input cNum:");
	fflush(stdin);
	scanf("%c", &cNum);
	printf("cNum = %c", cNum);
	system("pause");
	return 0;
}

可以去掉fflush(stdin)试试运行结果

也可以用getchar()但有点多余要等在这

2. 文件的读取

  1. 打开
	FILE *fp;
	struct student data;/*先把文件读到data中去,在读到链表中去*/ 
	fp = fopen(fileName, "r");/*这个方式是不会创造文件的*/ 
	if(fp == NULL){
		fp = fopen(fileName, "w+");/*这个方式能创造文件的*/
	}
  1. 读文件
	/*先把文件读到data中去,在读到链表中去*/
		/*将文件当作输入设备*/ 
	while(fscanf(fp, "%s\t%d\t%s\t%s\n", data.name, &data.age, data.sex, data.tel) != EOF){
						/*制表符\t*/       /*在读到链表里去*/ 
		insertNodeByHead(headNode, data);	
	}
  1. 关闭文件
	fclose(fp);

3. 文件的写入

void writeInfoToFile(struct Node*headNode, char*fileName){
	FILE *fp;
	fp = fopen(fileName, "w");/*已清空的方式*/ /*w+是追加的方式*/ 
	if(fp == NULL){
		printf("文件打开失败!");
		return ; 
	}
	struct Node *pMove = headNode->next;
	while(pMove){
		fprintf(fp, "%s\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age,  pMove->data.sex,  pMove->data.tel);
		pMove = pMove->next;
	}
	fclose(fp);
}

4. devc++出现“initializer element is not constant”错误

原因: 全局变量的值不能在编译时确定,要在执行时确定(编译原理

例一:

#include <stdio.h>
int a = 1;
int b = 2;
int c = a+b;
 
int main() {
    printf("%d", c);
    return 0;
}

此时全局变量c的值不能在编译时确定。

解决方法:

#include <stdio.h>
int a = 1;
int b = 2;
int c; //只作声明
 
int main() {
	c = a + b; // 在main函数里面进行赋值
	printf("c is %d\n", c);
	return 0;
}

例二:

struct Node *list = createList();
int main(int argc, char *argv[]) {
	......
}

struct Node* createNode(struct student data){
	struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
	newNode->data = data;
	newNode->next = NULL;
	return newNode; 		
}

此时结构体struct Node *list的返回值不确定,cus createNode()中申请动态内存,所以返回值不确定
解决方法:

struct Node *list;
int main(int argc, char *argv[]) {
	list = createList();	/*赋值放在main()中*/
	......
}

struct Node* createNode(struct student data){
	struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
	newNode->data = data;
	newNode->next = NULL;
	return newNode; 		
}

5. devc++出现“[Error] invalid suffix “text” on floating constant”错误

.txt的默认打开方式设置为空,不是程序的问题,在电脑设置中找.

发布了108 篇原创文章 · 获赞 114 · 访问量 8582

猜你喜欢

转载自blog.csdn.net/weixin_45773503/article/details/104180838