今天偶然间碰到这么一个程序,小样,还挺有意思,废话不多说了,直接看吧!
代码1:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(){
struct node{
char name[10];
int score;
};
struct node student;
FILE *fptr;
if((fptr = fopen("student.txt", "wb")) == NULL){
printf("无法打开student.txt");
exit(1);
}
do{
printf("\n\nEnter name:");
gets(student.name);
printf("Enter score:");
scanf("%d", &student.score);
fwrite(&student, sizeof(student), 1, fptr);
printf("One more(Y/n)?");
}while(getche() == 'y');
fclose(fptr);
getch();
}
恩恩,大家可以先过一遍,然后自己敲一下代码,(哈哈,不错,全出现了,gets,fwrite,getche,scanf),
问题::结果有点诡异
恩恩,大家可以看到了,第二次name还没有来得及输入就直接跳到了score,啊,啊,为什么,别急啊!
代码2:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(){
struct node{
char name[10];
int score;
};
struct node student;
FILE *fptr;
char scorebuf[81];
if((fptr = fopen("student.txt", "wb")) == NULL){
printf("无法打开student.txt");
exit(1);
}
do{
printf("\n\nEnter name:");
gets(student.name);
printf("Enter score:");
student.score = atoi(gets(scorebuf));
fwrite(&student, sizeof(student), 1, fptr);
printf("One more(Y/n)?");
}while(getche() == 'y');
fclose(fptr);
return 0;
}
还是希望大家自己在头脑中过一遍,然后在敲一敲,
好:继续看:
对,这回好了,但是,这是为什么呢?
当时刚看到这个程序,想不通,然后疑问还比较大,问了韩飞同学,他说:光是上面前面那几句,一个gets函数处理换行符,scanf不处理换行符,你明白吗?
哈哈, 谢谢他,给我指出了重要的一点,想着这些东西虽然小,但是还比较重要,就想着写下来,跟大家讨论讨论
我们来看一看:
1.函数gets(字符指针)
头文件 stdio.h (c) cstdio(c++ )
原型:char *gets(char*)
读入成功,返回与参数相同的指针&#x