黑马程序员技术交流社区

标题: 大神啊!!!快帮帮我吧 [打印本页]

作者: 庞佳星    时间: 2015-7-28 10:55
标题: 大神啊!!!快帮帮我吧
//输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)
#include<stdio.h>
int main()
{
        int i,zimu;
        char a[100];
        printf("Please enter a sentence:");//定义一句话放在同一个数组里包括空格和字母
        scanf("%s",a);
        zimu=a[0]-32;//先对首写字母进行大写,因为ASCII代码与整形数据可以相加
        printf("%c",zimu);
        for(i=1;i<100;i++)
        {
                if(a[i]==' ')//碰见空格,下个字母大写
                {
                        zimu=a[i+1]-32;
                    printf("%c",zimu);
                }
                if(a[i]=='\0')//如果有结束标识符跳出循环
                {
                        break;
                }
                if(a[i]!='\0'&&a[i]!=' ')//如果不是上边两种,直接输出该位置的字母
                {
                        printf("%c",a[i]);
                }
        }
}
只能输出第一个单词,为什么啊!!!头疼。
作者: 孙虾米    时间: 2015-7-28 11:06
我也在刚学习,看不出来
作者: 庞佳星    时间: 2015-7-28 11:08
孙虾米 发表于 2015-7-28 11:06
我也在刚学习,看不出来

加个好友吧,一起交流
作者: 风火山林    时间: 2015-7-28 11:30
一起交流
作者: liusuizuoyou    时间: 2015-7-28 11:36
用  scanf   输入字符串的时候只要 遇到空格 程序就认为输入结束
作者: wy911011    时间: 2015-7-28 11:49
scanf不能接收空格,你可以用fgets()接收空格
你把  scanf("%s",a);这句话换成fgets(a,100,stdin);    a是你定义的数组名,100是数组长度,stdin表示接收输入。
还有,你没发现你的程序不止这个问题么。
当你输入abc的时候,它会打出Aabc.
你要把最后一个输出语句 printf("%c",a[i]);改成printf("%c",a[i+1]);
你自己在理一遍思路,看看~

作者: 爱生活爱程序    时间: 2015-7-28 11:56
scanf遇到空格和回车键就结束,可以用gets()接收
作者: wy911011    时间: 2015-7-28 12:03
也可以使用gets()函数
gets(a);
但是使用它时会提示不安全,当输入字符超过字符串的时候,就会有问题。
fgets()函数输入时,当输入字符超过字符串长度的时候,它不会接收了,他只会接收字符串长度-1个字符,
还留一个位置存放结束字符‘\0’
作者: xch184415359    时间: 2015-7-28 12:12
看不懂啊:'(:'(
作者: 挚兀嘟    时间: 2015-7-28 15:34
本帖最后由 挚兀嘟 于 2015-8-21 09:21 编辑

努力学习中
作者: 丁铭检    时间: 2015-7-28 22:20
你把scanf换成gets试一下。。。
作者: 刘唐飞    时间: 2015-7-29 01:50
不对吧 scanf 不是遇到空格了没事吗?应该是接受字符的事情把
作者: 飞翔的猪    时间: 2015-7-29 10:22
你的方法:1.没有修改原本的数组,只是输出做了修改,反倒不如修改原数组方便,二没有考虑如果本来就是大写字母呢,三,如果是数字呢??,所以我改了改程序,以下,以供交流。
#include<stdio.h>
#include<string.h>
int main()
{
        int i,zimu;
        char a[100];
        printf("Please enter a sentence");
        gets(a);
        if(a[0]>='a'&&a[0]<='z')
        {
        a[0]=a[0]-32;|
        }
        for(i=1;i<strlen(a);i++)
        {
                if((a[i]==' ')&&(a[i+1]>='a'&&a[i+1]<='z'))
                {
                      a[i+1]=a[i+1]-32;
                }
        }
        printf("%s",a);
       return 0;
}

作者: 庞佳星    时间: 2015-7-30 08:37
飞翔的猪 发表于 2015-7-29 10:22
你的方法:1.没有修改原本的数组,只是输出做了修改,反倒不如修改原数组方便,二没有考虑如果本来就是大写 ...

谢谢哈!自己也查了一部分最后的代码是这样
#include<stdio.h>
int main()
{
        int i,Capital;
        char string[100],c;
        printf("Please enter a sentence:");       //定义一句话放在同一个数组里包括空格和字母
        gets(string);
        Capital=string[0]-32;                      //先对首写字母进行大写,因为ASCII代码与整形数据可以相加
        printf("%c",Capital);
        for(i=1;(c=string!='\0');i++)           //如果遇到结束标示符,通知循环
        {
                if(string==' ')                 //碰见空格,对空格后的字母的ASCII码进行处理,但是该位置输出空格符
                {
                        string[i+1]=string[i+1]-32;
                        printf(" ");
                }
                else                               /*因为以前已经对空格后的字母进行ASCII码的变化,所以空格后输出
                                                                                   的为大写字母 其他字母原样输出*/
                {
                        printf("%c",string);
                }
        }
}
作者: 庞佳星    时间: 2015-7-30 08:38
刘唐飞 发表于 2015-7-29 01:50
不对吧 scanf 不是遇到空格了没事吗?应该是接受字符的事情把

恩恩,谢谢哈
作者: 庞佳星    时间: 2015-7-30 08:40
wy911011 发表于 2015-7-28 12:03
也可以使用gets()函数
gets(a);
但是使用它时会提示不安全,当输入字符超过字符串的时候,就会有问题。

恩恩,谢谢哈,查了scanf和gets()的区别,最终明白了,很谢谢你。
作者: 庞佳星    时间: 2015-7-30 09:16

好的qq1042664124
作者: 庞佳星    时间: 2015-7-30 09:35
挚兀嘟 发表于 2015-7-28 15:34
你看一下这样写会不会更好理解一些

int main(int argc, const char * argv[]) {

谢谢,fgets语句学懂了,谢谢
作者: 庞佳星    时间: 2015-7-30 09:38
飞翔的猪 发表于 2015-7-29 10:22
你的方法:1.没有修改原本的数组,只是输出做了修改,反倒不如修改原数组方便,二没有考虑如果本来就是大写 ...

当时我并没有考虑的那么全,没有考虑到数字,或者大写字母,你这个算法比我那个更好,感觉比我那个更贴近实际运用,非常谢谢你,懂了。
作者: ivae0    时间: 2015-7-30 10:03
scanf不能接收空格,看看基础视频里的scanf的用法
作者: 小林儿    时间: 2015-7-30 21:18
谢谢分享
作者: Foreversidy夏末    时间: 2015-7-30 21:56
只能学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2