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. 文件的读取
- 打开
FILE *fp;
struct student data;/*先把文件读到data中去,在读到链表中去*/
fp = fopen(fileName, "r");/*这个方式是不会创造文件的*/
if(fp == NULL){
fp = fopen(fileName, "w+");/*这个方式能创造文件的*/
}
- 读文件
/*先把文件读到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);
}
- 关闭文件
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
的默认打开方式设置为空,不是程序的问题,在电脑设置中找.