程序不继续运行
void StuInput(){
char choice;
FILE *fp;
fp = fopen("C:\\Users\\yyp\\Desktop\\text1.txt","a+");
if(fp == NULL)
{
printf("Error!\n");
exit(0);
}
printf("***********Student Record System***********\n");
printf("Please input num: ");
scanf("%d",&stu.num);
printf("Please input name: ");
scanf("%s",stu.name);
printf("Please input age: ");
scanf("%d",stu.age);
fprintf(fp,"%d %s %d\n",stu.num,stu.name,stu.age);
fclose(fp);
printf("Continue to input? y or n ");
fflush(stdin);
scanf("%c",&choice);
if(choice == 'y')
{
StuInput();
}
}
输入完第一轮数据之后,就卡壳了
不出现这个printf("Continue to input? y or n ");然后就直接结束 是不是没有吸收掉前面的‘\n’ 本帖最后由 jackz007 于 2021-3-12 11:48 编辑
此句有错
scanf("%d",stu.age);
得改成这样
scanf("%d" , & stu . age) ;
没必要用递归
void StuInput()
{
. . . . . .
if(choice == 'y')
{
StuInput(); // 这是递归吗?
}
}
这是我修改的代码
#include <stdio.h>
void StuInput(char fn[])
{
char name ;
int num , age ;
FILE * fp ;
if((fp = fopen(fn , "a+"))) {
printf("\n") ;
printf("***********Student Record System***********\n") ;
for(;;) {
printf("Please input num name age : ") ;
scanf("%d%s%d" , & num , name , & age) ;
if(num > 0) fprintf(fp , "%d %s %d\n" , num , name , age) ;
else break ;
}
fclose(fp) ;
} else {
fprintf(stderr , "\n") ;
fprintf(stderr , "Can't open input file : %s\n" , fn) ;
fprintf(stderr , "\n") ;
}
}
void StuPrint(char fn[])
{
char name ;
int num , age ;
FILE * fp ;
if((fp = fopen(fn , "r"))) {
printf("\n") ;
printf("***********[ %s ]***********\n" , fn) ;
fscanf(fp , "%d %s %d" , & num , name , & age) ;
for(; ! feof(fp) ;) {
printf("%d %s %d\n" , num , name , age) ;
fscanf(fp , "%d %s %d" , & num , name , & age) ;
}
fclose(fp) ;
} else {
fprintf(stderr , "\n") ;
fprintf(stderr , "Can't open input file : %s\n" , fn) ;
fprintf(stderr , "\n") ;
}
}
int main(void)
{
char fn[] = "text1.txt" ;
StuInput(fn) ;
StuPrint(fn) ;
}
编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
***********Student Record System***********
Please input num name age : 100 abc 18
Please input num name age : 101 bcd 19
Please input num name age : 102 cde 20
Please input num name age : 103 def 21
Please input num name age : 0 0 0
***********[ text1.txt ]***********
100 abc 18
101 bcd 19
102 cde 20
103 def 21
D:\0002.Exercise\C> jackz007 发表于 2021-3-12 11:13
此句有错
得改成这样
所以说fscanf遇到\n就会结束执行并且继续执行程序下面的语句吗 学编程的盆子 发表于 2021-3-12 11:49
所以说fscanf遇到\n就会结束执行并且继续执行程序下面的语句吗
是的,这一句要求文本文件中每一行的行末必须是换行符 '\n',否则,fscanf() 就会被卡住。
页:
[1]