scanf输入后 换行符还是留在缓冲区中,
特别地: scanf(“%c”,&a)
会读取换行符 所以我们在scanf后面应该加上getchar()
但是一般情况下scanf只读取对应的类型 所以不用管
另外 gets(好像也会自动读取换行符)
为避免此类问题 输入不用单个字符输入 scanf("%d","%c","%s","%f",&a,&b,c,&d); 完美解决且方便输入
#include<stdio.h>
int main(int argc, char const *argv[])
{
char a;
int b;
while(1)
{
scanf("%d",&b);
printf("值是%d\n",b);
if(b>0&&b<9)
printf("ok");
}
return 0;
}
int main(int argc, char const *argv[])
{
char a;
while(1)
{
scanf("%c",&a);
getchar();//必须有
printf("值是%c\n",a);
if(a=='0')
printf("ok");
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<math.h>
struct goods
{
char no[15];
char name[25];
float price;
int num;
}good;
int main(int argc, char const *argv[])
{
FILE *fp;
if((fp=fopen("/Users/hellooks/Desktop/fileio/c.txt","w+t"))==NULL)
printf("fail");
char n='s';
while(fread(&good,sizeof(good),1,fp))
{
printf("%s\n",good.no);
}
printf("之前有的");
while(1)
{
scanf("%s %d %f %s",good.no,&good.num,&good.price,good.name);
getchar();
fwrite(&good,sizeof(good),1,fp);
printf("shifoujixushuru \n");
scanf("%c",&n);
printf("%c\n",n);
if(n=='N')
break;
}
printf("退出输入\n");
getchar();//注意 下面要用gets的话 就必须有getchar() 否者 被gets吸收了
rewind(fp);
while(fread(&good,sizeof(good),1,fp))
{
printf("%s\n",good.no);
}
char s[100];
//gets(s)
scanf("%s",s);
rewind(fp);
while(fread(&good,sizeof(good),1,fp))
{
printf("%d\n",strcmp(good.no,s) );
if(strcmp(good.no,s)==0)
printf("find %s %s\n",good.no,good.name);
}
return 0;
}