| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 473 人关注过本帖
标题:谁能帮忙看一下这个程序,为啥第二个scanf函数不执行?
只看楼主 加入收藏
maopengr11
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2012-10-30
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:2 
谁能帮忙看一下这个程序,为啥第二个scanf函数不执行?
#include<stdio.h>
#include<string.h>
#define MAXSIZE 100
void main()
{
    void deletechar(char x,char str[]);
    void uppercase(char x,char str[]);
    void lowercase(char x,char str[]);
    char str[MAXSIZE];
    char s;
    printf("请输入字符串:\n");
    gets(str);
    printf("请输入要删除的字符:");
    scanf("%c",&s);
    deletechar(s,str);
    printf("请输入要小写的字母(该字母为大写):");
    scanf("%c",&s);
    lowercase(s,str);
    printf("请输入要大写的字母(该字母为小写):");
    scanf("%c",&s);
    uppercase(s,str);
}

void deletechar(char x,char str[])
{
    int i,j,n=0;
    char c,r;
    for(i=0;(c=str[i])!='\0';i++)
    {
        if(x==str[i])
        {
            n=1;
            for(j=i;(r=str[j])!='\0';j++)
                str[j]=str[j+1];
        }
    }
    if(n==0)  printf("\n查无次字母!\n");
    printf("新的字符串为:\n");
    puts(str);
}

void uppercase(char x,char str[])
{
    int i,n=0;
    char c;
    for(i=0;(c=str[i])!='\0';i++)
    {
        if(x==str[i])
        {
            n=1;
            str[i]=str[i]-32;
        }
    }
    if(n==0)  printf("\n查无次字母!\n");
    printf("新的字符串为:\n");
    puts(str);
}

void lowercase(char x,char str[])
{
    int i,n=0;
    char c;
    for(i=0;(c=str[i])!='\0';i++)
    {
        if(x==str[i])
        {
            n=1;
            str[i]=str[i]+32;
        }
    }
    if(n==0)  printf("\n查无次字母!\n");
    printf("新的字符串为:\n");
    puts(str);
}
搜索更多相关主题的帖子: 字母 void include 字符串 
2012-11-23 18:09
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:12 
这是因为第一个scanf读取了你输入的一个字母,将回车放在输入中,第二个scanf不等你输入直接读取了这个回车,所以造成了第二个函数没执行,其实是执行了发现字符串种没有回车符号所以执行语句:printf("\n查无次字母!\n");
可以用getchar语句吸收scanf后的回车,代码如下:
程序代码:
#include<stdio.h>
#include<string.h>
#define MAXSIZE 100
void main()
{
    void deletechar(char x,char str[]);
    void uppercase(char x,char str[]);
    void lowercase(char x,char str[]);
    char str[MAXSIZE];
    char s;
    printf("请输入字符串:\n");
    gets(str);
    printf("请输入要删除的字符:");
    scanf("%c",&s);
    while(getchar()!='\n')
        continue;
    deletechar(s,str);
    printf("请输入要小写的字母(该字母为大写):");
    scanf("%c",&s);
    while(getchar()!='\n')
        continue;
    lowercase(s,str);
    printf("请输入要大写的字母(该字母为小写):");
    scanf("%c",&s);
    uppercase(s,str);
}

void deletechar(char x,char str[])
{
    int i,j,n=0;
    char c,r;
    for(i=0;(c=str[i])!='\0';i++)
    {
        if(x==str[i])
        {
            n=1;
            for(j=i;(r=str[j])!='\0';j++)
                str[j]=str[j+1];
        }
    }
    if(n==0)  printf("\n查无次字母!\n");
    printf("新的字符串为:\n");
    puts(str);
}

void uppercase(char x,char str[])
{
    int i,n=0;
    char c;
    for(i=0;(c=str[i])!='\0';i++)
    {
        if(x==str[i])
        {
            n=1;
            str[i]=str[i]-32;
        }
    }
    if(n==0)  printf("\n查无次字母!\n");
    printf("新的字符串为:\n");
    puts(str);
}

void lowercase(char x,char str[])
{
    int i,n=0;
    char c;
    for(i=0;(c=str[i])!='\0';i++)
    {
        if(x==str[i])
        {
            n=1;
            str[i]=str[i]+32;
        }
    }
    if(n==0)  printf("\n查无次字母!\n");
    printf("新的字符串为:\n");
    puts(str);
} 



[ 本帖最后由 youngdavid 于 2012-11-23 19:20 编辑 ]
2012-11-23 18:53
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:3 
当输入字符串或字符不在循环内的时候,你加上getchar();的话是肯定对你的有好处的,当在循环内的时候要注意小心使用,这是我目前的总结,希望能对你有帮助~~

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-23 20:02
快速回复:谁能帮忙看一下这个程序,为啥第二个scanf函数不执行?
数据加载中...
 
   



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

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