| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 712 人关注过本帖
标题:请问这个程序的错误在哪里?
只看楼主 加入收藏
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:7 
请问这个程序的错误在哪里?
#include<stdio.h>
#include<stdlib.h>
void main()
{
    char s[10],s1[10],n;
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    while(n=='y')
    {
    printf("1:\n");
    gets(s);
    printf("2:\n");
    gets(s1);
    puts(s);
    puts(s1);
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    }
   
}

运行后无法输入1的数据。
搜索更多相关主题的帖子: include 
2011-12-05 20:40
杨易轩
Rank: 2
来 自:山西
等 级:论坛游民
帖 子:4
专家分:33
注 册:2011-4-14
收藏
得分:10 
加个getchar();就好了,因为你在输入“y”回车后,回车符没有被吸收
修改后源程序:
#include<stdio.h>
#include<stdlib.h>
void main()
{
    char s[10],s1[10],n;
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    getchar();
    while(n=='y')
    {
    printf("1:\n");
    gets(s);
    printf("2:\n");
    gets(s1);
    puts(s);
    puts(s1);
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    }
   
}

2011-12-05 20:51
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:3 
程序代码:
#include<stdio.h>
#include<stdlib.h>
void main()
{
    char s[10],s1[10],n;
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    getchar();
    while(n=='y')
    {
        printf("1:\n");
        gets(s);
        printf("2:\n");
        gets(s1);
        puts(s);
        puts(s1);
        printf("留言吗? y  n\n");
        scanf("%c",&n);
        getchar();
    }   
}
2011-12-05 20:51
dn1483851197
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2011-10-5
收藏
得分:0 
你要干啥啊?
2011-12-05 20:54
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 2楼 杨易轩
可是如果没有while语句就不会有这个问题,这是为什么?
向下面这样:

#include<stdio.h>
 #include<stdlib.h>
 void main()
 {
     char s[10],s1[10],n;
     printf("留言吗? y  n\n");
     scanf("%c",&n);
     printf("1:\n");
     gets(s);
     printf("2:\n");
     gets(s1);
     puts(s);
     puts(s1);
     }
     
}
这样就可以给1,2赋值,这是什么原因?
 
2011-12-05 21:15
hxcet
Rank: 4
等 级:业余侠客
帖 子:78
专家分:229
注 册:2011-11-15
收藏
得分:2 
2L说的是对的,getchar()就是为了吸收多余的回车符。
至于你说去掉while就可以了,我表示在我这里去掉while也是不行的,还是要加getchar()的。
不过2L的程序最后少了个getchar();正确程序如3L的
2011-12-06 10:06
原味好
Rank: 4
来 自:西安
等 级:业余侠客
帖 子:59
专家分:250
注 册:2011-11-29
收藏
得分:5 
你的错误是:
            当输入y后编译系统会把你输入的回车也当做一个字符放在了字符数组s里面了,所以会出现你那种情况;并且只有字符会出现这种情况
其实有两种修改方法:一、就是二楼说得那种加getchar();但是二楼的getchar()加错了地方,应该放在while循环里的前面;
                二、就是在while循环里的前面加个刷新函数fflush(stdin)就可以了;
程序代码:
#include<stdio.h>
#include<stdlib.h>
void main()
{
    char s[10],s1[10],n;
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    while(n=='y')
    {
    printf("1:\n");
    gets(s);
    printf("2:\n");
    gets(s1);
    puts(s);
    puts(s1);
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    }
   
}
2011-12-06 10:33
原味好
Rank: 4
来 自:西安
等 级:业余侠客
帖 子:59
专家分:250
注 册:2011-11-29
收藏
得分:0 
你的错误是:
            当输入y后编译系统会把你输入的回车也当做一个字符放在了字符数组s里面了,所以会出现你那种情况;并且只有字符会出现这种情况
其实有两种修改方法:一、就是二楼说得那种加getchar();但是二楼的getchar()加错了地方,应该放在while循环里的前面;
                二、就是在while循环里的前面加个刷新函数fflush(stdin)就可以了;
程序代码:
#include<stdio.h>
#include<stdlib.h>
void main()
{
    char s[10],s1[10],n;
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    while(n=='y')
    {            //在这里加getchar()接收回车,或者加fflush(stdin)函数;每一次进入循环前清空内存缓冲区;
    printf("1:\n");
    gets(s);
    printf("2:\n");
    gets(s1);
    puts(s);
    puts(s1);
    printf("留言吗? y  n\n");
    scanf("%c",&n);
    }
   
}
2011-12-06 10:36
快速回复:请问这个程序的错误在哪里?
数据加载中...
 
   



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

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