C语言基础问题,纠结的IO函数
这个函数开始用scanf语句,如注释所示,一直出错,红色部分语句直接跳过了。后来想到用getchar试试,可以,但不知其解,求解答啊。以为是缓冲区问题,各种刷新缓冲区,但是没有解决…………
[code=C/C++][/code]
void Modify(Link l)
{
int selection;
int yesno;
char searchinput[20];
Node *p;
if(!l->next)
{
system("cls");
printf("\n No Student Record.\n");
printf("Press Any Key To Return...");
_getch();
return;
}
system("cls");
Disp(l);
printf("\n\n\t1 . Search by Number \n\t2 . Search by Name :\n");
printf("Please Enter a Choice : \n\t");
scanf("%d",&selection);
if(selection==1)
{
StringInput(searchinput,20,"Input Number,Please.");
p=Locate(l,searchinput,"num");
if(p)
{
PrintFingure();
PrintData(p);
printf(END);
printf("Sure to Modify? (Y/N) ");
fflush(stdin);
//scanf("%d",&yesno); //为什么不能工作呢?
yesno=getchar();
//cin>>yesno;
fflush(stdin);
if((yesno=='n')||(yesno=='N'))
{
printf("Press Any Key to Return...\n");
fflush(stdin);
_getch();
return;
}
else if(yesno=='Y'||yesno=='y')
{
save_flag=1;
StringInput(p->data.name,15,"Name");
p->data.cgrade=NumberInput("C language Score[0-100] :");
p->data.egrade=NumberInput("English Language Score[0-100] :");
p->data.mgrade=NumberInput("Math Language Score[0-100] :");
p->data.total=p->data.cgrade+p->data.egrade+p->data.mgrade;
p->data.ave=(float)p->data.total/3;
p->data.mingci=0;
printf("\n Modify Successfully.\n");
PrintData(p);
printf("Press Any Key to Return...");
_getch();
}
else
{
printf("Unknown Choice...");
printf("Press Any Key to Return...");
}
}
else
{
printf("No Data related Found.");
printf("Press Any Key to Return...");
}
}
[解决办法]
楼主,你是想用一个int变量输入字符n或N,看下面这程序,你输入N或n时,输出的并不是他们的ASCII码值,所以if((yesno=='n')||(yesno=='N'))这个条件不成立,没执行
#include<iostream>#include<cstdio>using namespace std;int main(){ int num; scanf("%d", &num); printf("%d\n", num); return 0;}
[解决办法]
仅供参考#include <stdio.h>char s[]="123 ab 4";char *p;int v,n,k;void main() { p=s; while (1) { k=sscanf(p,"%d%n",&v,&n); printf("k,v,n=%d,%d,%d\n",k,v,n); if (1==k) { p+=n; } else if (0==k) { printf("skip char[%c]\n",p[0]); p++; } else {//EOF==k break; } } printf("End.\n");}//k,v,n=1,123,3//k,v,n=0,123,3//skip char[ ]//k,v,n=0,123,3//skip char[a]//k,v,n=0,123,3//skip char[b]//k,v,n=1,4,2//k,v,n=-1,4,2//End.