A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© WANGJIAO 中级黑马   /  2014-10-22 11:36  /  1201 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 WANGJIAO 于 2014-10-22 20:33 编辑

编译链接都没错但就是只能执行if下面的语句,其他的都不执行,为什么会这样?该怎么改?更多小问题见代码:PS:还有一个小问题:空格键到底是\0还是\t?
  1. //输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)
  2. #include <stdio.h>
  3. #include <string.h>

  4. int main(int argc, const char * argv[]) {
  5.    //提示输入句子
  6.     printf("请输入句子:\n");
  7.    //接收数据(这里的数据不确定,我就设一个最大值,不然没法继续,不知道这样对不对,还有没有更好的方法?)
  8.     char str[100];
  9.    
  10.     scanf("%s",str);
  11.     //首先判断第一个字母,并改写
  12.     if (str[0]>='a'&&str[0]<='z') {
  13.         
  14.         printf("%c",str[0]-('a'-'A'));

  15.     }else{
  16.         printf("%c",str[0]);
  17.     }
  18.      //其次遍历所有字母,并找到符合条件的改写
  19.     for (int i = 1; i<strlen(str); i++) {
  20.        //找到空格,判断并改写空格下一个字母
  21.         if (str[i+1] == '\0' &&str[i+2]>='a'&&str[i+2]<='z') {
  22.             
  23.             printf("%c",str[i+2]-('a'-'A'));
  24.             
  25.         } else {
  26.             
  27.             printf("%c",str[i+2]);
  28.         }
  29.    
  30.     }
  31.      return 0;
  32. }

复制代码



评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

15 个回复

倒序浏览
今天早上又看了一遍指针,所以不要怕我不懂指针,要用指针就用指针吧,不过不知道是我的视频下的不全还是本来就是这样,视频的序号不连续,比如指针没有05,06和12,而且视频和代码对不上,代码有的,视频没有,不知道怎么回事?
回复 使用道具 举报
WANGJIAO 发表于 2014-10-22 11:40
今天早上又看了一遍指针,所以不要怕我不懂指针,要用指针就用指针吧,不过不知道是我的视频下的不全还是本 ...

我的指针视频也不全! 看你提了挺多问题的,建议你试试设断点 单步调试 既能解决问题  又能知道自己那个地方写的不对!
回复 使用道具 举报
你把scanf函数换成gets()试试
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include <string.h>




  3. void test(char s[])
  4. {
  5.     s[0] = s[0] - 32;
  6.     for (int i = 1; s[i] != '\0'; i++) {
  7.         if (s[i -1] == ' ') {
  8.             
  9.             s[i] = s[i] - 32;
  10.         }
  11.       
  12.     }
  13.    
  14. //    for (int i = 0; i < strlen(s); i++) {
  15. //        printf("%c",s[i]);
  16. //    }
  17. //    printf("\n");
  18.     puts(s);
  19. }

  20. int main()
  21. {
  22.     char s[100];
  23.     printf("请输入英文句子,用空格隔开:\n");
  24.     gets(s);
  25.     test(s);
  26.    
  27.     return 0;
  28. }
复制代码
回复 使用道具 举报
LeeWong 发表于 2014-10-22 13:55
我的指针视频也不全! 看你提了挺多问题的,建议你试试设断点 单步调试 既能解决问题  又能知道自己那个 ...

编译连接都没问题啊,就是整个程序卡住了
回复 使用道具 举报

第一个为什么不判断呢?
回复 使用道具 举报
大神快来~我需要你!
回复 使用道具 举报
LeeWong 中级黑马 2014-10-22 19:37:10
9#
WANGJIAO 发表于 2014-10-22 18:26
编译连接都没问题啊,就是整个程序卡住了

单步调试 是为了让你看看 每一步 程序中变量的值是如何变化的  是不是按照你的要求走的!
回复 使用道具 举报
LeeWong 发表于 2014-10-22 19:37
单步调试 是为了让你看看 每一步 程序中变量的值是如何变化的  是不是按照你的要求走的! ...

不懂,求教~{:2_32:}
回复 使用道具 举报
WANGJIAO 发表于 2014-10-22 18:28
第一个为什么不判断呢?

我是假定不是空格开头的,所以开始的时候第一个已经处理了
回复 使用道具 举报
本帖最后由 WANGJIAO 于 2014-10-23 11:53 编辑

……我把c语言零基础看完了,反复看了两遍,确定没有讲到get,put,基础测试却要用这些:(不是说好的学完零基础就能搞定基础测试么?
回复 使用道具 举报
我说你是个逗比 发表于 2014-10-23 09:32
我是假定不是空格开头的,所以开始的时候第一个已经处理了

不是判断空格是判断大小写,如果本身就是大写,就出问题了,不过这个方法可以用,谢谢,可是视频里完全没讲get啊,求问哪里有教?感觉这个好好用,可以接收不确定输入,我不会用
回复 使用道具 举报
本帖最后由 WANGJIAO 于 2014-10-23 20:05 编辑

非常感谢,在你的帮助下我终于做出了这一题,谢谢,代码写在下面,关键就在数据的接收上,scanf不行,可是我又没学过gets所以卡壳了,教学视频里没有get,我这个郁闷啊,都没讲过我怎么做题啊
  1. //输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)
  2. #include <stdio.h>
  3. #include <string.h>

  4. int main(int argc, const char * argv[]) {
  5.    //提示输入句子
  6.     printf("请输入句子:\n");
  7.    //接收数据(这里的数据不确定,我就设一个最大值)补充:用char str[]={0};也行
  8.     char str[200];
  9.    
  10.     gets(str);
  11.     //首先判断第一个字母,并改写,是小写就改写,是大写就输出本身
  12.     if (str[0]>='a'&&str[0]<='z') {
  13.         
  14.         printf("%c",str[0]-('a'-'A'));
  15.         printf(" ");//每个单词后空格保证可读性

  16.     }else{
  17.         printf("%c",str[0]);
  18.         printf(" ");
  19.     }
  20.      //其次遍历所有字母,并找到符合条件的改写
  21.     for (int i = 1; i<strlen(str); i++) {
  22.        //找到空格,判断并改写空格下一个字母
  23.         if (str[i] == ' '&&(str[i+1]>='a'&&str[i+1]<='z')) {
  24.             
  25.             printf("%c",str[i+1]-('a'-'A'));
  26.             
  27.         } else {
  28.             
  29.             printf("%c",str[i+1]);
  30.         }
  31.         
  32.     }
  33.     //整个句子完后换行
  34.     printf("\n");
  35.      return 0;
  36. }
复制代码

回复 使用道具 举报
新技能get√哈哈哈哈真的是get——gets():D:victory:
回复 使用道具 举报
WANGJIAO 发表于 2014-10-23 12:11
非常感谢,在你的帮助下我终于做出了这一题,谢谢,代码写在下面,关键就在数据的接收上,scanf不行,可 ...

不知道我这个gets用的对不对呢?虽然没报错可是你的gets和puts一起用的,什么意思?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马