| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1126 人关注过本帖
标题:关于用scanf输入字符的问题
只看楼主 加入收藏
千树
Rank: 1
等 级:新手上路
帖 子:62
专家分:1
注 册:2013-11-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:21 
关于用scanf输入字符的问题
为什么scanf("%c",&a);在有的程序中是对的,在有的中是错的,而要在%c前加一个空格呢
2013-12-26 20:00
ltp217
Rank: 2
等 级:论坛游民
帖 子:8
专家分:32
注 册:2013-6-4
收藏
得分:2 
这个没关系吧。。
2013-12-26 20:30
liu229118351
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:101
注 册:2013-10-23
收藏
得分:2 
贴具体的吧?

单曲循环,需要信心+耐心+恒心
2013-12-26 20:33
千树
Rank: 1
等 级:新手上路
帖 子:62
专家分:1
注 册:2013-11-4
收藏
得分:0 
前一个:
#include<stdio.h>
int main()
{char ch;
 scanf("%c",&ch);
 printf("%c\n",ch);
 return 0;
}
后一个:
void del()        //删除学生信息的函数
{FILE *fp;
 int n,m=0,flag=0;
 char ch;
 struct Student *head,*p1,*p2,*current,*front,*p;
 if((fp=fopen("student_list.txt","r"))==NULL)
    {
        printf("cannot open file");
        exit(0);
    }
 printf("Please enter the student's ID:");
 scanf("%d",&n);
 if(feof(fp))printf("The student's information cannot be find!");
 head=NULL;
 p1=p2=(struct Student*)malloc(sizeof(struct Student));
 while(!feof(fp))
 {
        fscanf(fp,"%s",p1->name);
        fscanf(fp,"%s",p1->sex);
        fscanf(fp,"%d",&p1->ID);
        fscanf(fp,"%s",p1->academy);
        fscanf(fp,"%s",p1->clas);
        m++;                 
        if(m==1)head=p1;   
        else p2->next=p1;
        p2=p1;
        p1=(struct Student*)malloc(sizeof(struct Student));      
 }
 p2->next=NULL;         //p2指向链表尾
 free(p1);
 fclose(fp);
 front=NULL;
 current=head;
 while(current!=NULL&&current->ID!=n)
 {front=current;
  current=current->next;
 }
 if(current!=NULL)
 {printf("Are you sure delete the student's informatin?\n");
  printf("Please input y or n.\n");
  scanf(" %c",&ch);        //要有一个空格
  if(ch=='Y'||ch=='y')
        flag=1;
  else  flag=0;
后一个的代码不完整啊,只有贴了前一部分啊
2013-12-26 20:37
千树
Rank: 1
等 级:新手上路
帖 子:62
专家分:1
注 册:2013-11-4
收藏
得分:0 
回复 3楼 liu229118351
后一个代码中,如果不加空格,我还没有输入选择,后面的打印的就都出来了
2013-12-26 20:39
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:2 
回复 4楼 千树
这个很简单,你只需要在下面这条语句前面
scanf(" %c",&ch); //要有一个空格
加一句代码
getchar();
就行了。至于为什么要这样做,限于篇幅,我就不详细说明了。

本人QQ:775420425
2013-12-26 21:25
千树
Rank: 1
等 级:新手上路
帖 子:62
专家分:1
注 册:2013-11-4
收藏
得分:0 
回复 6楼 hjxlj
那一般我在什么样的情况下要加这句话呢
2013-12-26 22:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
查了一下樓主求問的歷史帖,對比現在的問題,唉……

授人以渔,不授人以鱼。
2013-12-26 22:58
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:0 
回复 7楼 千树
一般如果有2个scanf()语句的情况下,不管这2个scanf()语句相隔有多远,都应该在这2个scanf()之间插入一个getchar()语句,否则第2个scanf()往往会工作不正常。

本人QQ:775420425
2013-12-26 23:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用hjxlj在2013-12-26 23:06:11的发言:

一般如果有2个scanf()语句的情况下,不管这2个scanf()语句相隔有多远,都应该在这2个scanf()之间插入一个getchar()语句,否则第2个scanf()往往会工作不正常。

你是沒遇到一個getchar()吸收不盡的情形而已。問題不在於能否用getchar()吸收,而在於你不知道該用多少個getchar()才萬無一失。

授人以渔,不授人以鱼。
2013-12-26 23:22
快速回复:关于用scanf输入字符的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023732 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved