解题思路:
预计用fgets接受输入,假设用例来自标准输入端,读取一行长度不超过100的字符串,到'\n'为止:

#include<stdio.h>
#include<ctype.h>
#define N 110
int main(){
    char i,s[N];
    if(NULL!=fgets(s,N,stdin)){
        for(i=0;s[i]!='\n'&&i<100;i++){    //按题意到'\n'为止
            if(isupper(s[i]))              //若为大写字符
                putchar(tolower(s[i]));    //改成对应的小写
            else putchar(s[i]);
        }
    }
    return 0;
}

结果是答案错误。以为是输入的串更长,于是改用getchar:

#include<stdio.h>
int main(){
    char a;
    while((a=getchar())!='\n'){            //读到'\n'为止
        if(a>='A'&&a<='Z') putchar(a+32);  //大写转小写
        else putchar(a);
    }
}

发生输出超限错误。没想到一错再错,是不是语言不对,仔细比较了和正确程序的区别,发现正确程序,在判断字符之前,都计算了串长、或者找到'\0'就知道结束了。

注意事项:
由于测试用例很可能不是用键盘,而是用程序将字符生成到文件中,所以在用fgets函数时,不要忽略出现在'\n'前的'\0',虽然'\0'很难从键盘输入到文件,也不能排除字符串在行尾前结束。
参考代码:

#include<stdio.h>
int main(){
    char a;
    while((a=getchar())!='\0'){            //读到字符串结束符'\0'为止
        if(a>='A'&&a<='Z') putchar(a+32);  
        else putchar(a);
    }
}

若不能忽略'\0'之后的输入:

#include<stdio.h>
#include<ctype.h>
#define N 110
int main(){
    char i,s[N];
    if(NULL!=fgets(s,N,stdin)){            //接受输入行
        for(i=0;s[i]!='\0'&&i<100;i++){    //找到首次出现的'\0'为止
            if(isupper(s[i]))              
                putchar(tolower(s[i]));    
            else putchar(s[i]);
        }
    }
    return 0;
}


点赞(2)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论