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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Moebius 于 2014-7-6 19:03 编辑

题目如上。
#include <stdio.h>
void main()
{
        char *c;
        int i;
        printf("请输入英语句子\n");
        scanf("%s",c);
        x[0]=x[0]-32;
        for (i=1;c!='\0';i++)
                {  if (c[i-1]==' ')  
                        {  
                                                          c=c-32;
                        }
                }
        for (i=0;c!='\0';i++)
        {  
                printf("%c",c);
        }
        printf("\n");
        return 0;
}
代码如上,为什么编译没问题,可是它只是把第一个字母变大写,后面空格后的字母都不写了呢?

17 个回复

倒序浏览
自己查出来问题了。。 scanf( "%[^\n]", c); 表示可以存放除了 \n 外的其他所有字符。
回复 使用道具 举报
好像有个函数可以直接这么办吧?
回复 使用道具 举报
自己的错误自己最难发现了
回复 使用道具 举报
/*
输入一英文句子,将其中一切单词首字符转换成大写后输出。
*/

#include <stdio.h>

int main(int argc, const char * argv[])
{
    printf("请输入一段英文:\n");
   
    char a[100];  //定义一个数组接收字符串
   
    char *p = a;  //定义一指针指向数组首元素
   
    gets(a);  //输入一句英文
   
     *p -= 32;  //将第一个单词变为大写
   
    while(*p != '\0')  //循环直到遇到\0
    {
        
        if(*p != ' ')  //如果不为空格就继续判断
        {
            p++;
        }
        else if(*p == ' ')  //如果检测到了空格就使下一个字母变为大写
        {
            p++;
            
            *p -= 32;
        }
    }
   
    puts(a);  //输出a
   
    return 0;
}
好像用gets和put可以,我用scanf也会出现这个问题。。。。。不过用来gets好像有个警告,说不安全

点评

如果有2个空格怎么办,全都想得太简单  发表于 2014-11-25 15:39
回复 使用道具 举报
如果第一个单词如果是大写,岂不会出问题,应该先判断下。
回复 使用道具 举报
★Joean_Zhou 发表于 2014-7-7 09:50
/*
输入一英文句子,将其中一切单词首字符转换成大写后输出。
*/

不用指针能写吗?
回复 使用道具 举报

能的,用数组也能实现的
回复 使用道具 举报
  1. #include <stdio.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     printf("请输入一段英文:\n");
  5.    
  6.     char a[100];  //定义一个数组接收字符串
  7.    
  8.     char *p = a;  //定义一指针指向数组首元素
  9.    
  10.     gets(a);  //输入一句英文

  11.         if(*p != ' '&& *p >='a' && *p <='z' )  //如果不为空格且是小写
  12.         {
  13.                         *p -= 32;
  14.             p++;
  15.         }
  16.                 else if(*p != ' '&& *p >='A' && *p <='Z') // 如果不为空格且是大写
  17.                 {
  18.                         p++;
  19.                 }
  20.         else if(*p == ' ')  // 如果为空格
  21.         {
  22.             p++;
  23.         }   
  24.     while(*p != '\0')  //循环直到遇到\0
  25.     {
  26.         
  27.       if(*p != ' ')  //如果不为空格就继续判断
  28.         {
  29.             p++;
  30.         }
  31.         else if(*p == ' ')  //如果检测到了空格就使下一个字母变为大写
  32.         {
  33.             p++;
  34.             if(*p >='a' && *p <='z' )
  35.                 *p -= 32;
  36.         }
  37.     }
  38.    
  39.     puts(a);  //输出a
  40.    
  41.     return 0;
  42. }
复制代码
回复 使用道具 举报 2 0
Moebius 发表于 2014-7-6 19:05
自己查出来问题了。。 scanf( "%[^\n]", c); 表示可以存放除了 \n 外的其他所有字符。 ...

楼主能不能说的详细些,我也遇到这个问题了
回复 使用道具 举报
邵起 发表于 2014-12-9 20:20
楼主能不能说的详细些,我也遇到这个问题了

网上看到说这叫正则表达式 一堆用法 没细看 比如%[0-9]就是录入这几个数字 ^表示取反集 %[^\n]就表示了除了\n字符 一概全收 大概是这意思。。
回复 使用道具 举报
邵起 中级黑马 2014-12-12 18:40:35
12#
从今以后 发表于 2014-12-12 17:24
网上看到说这叫正则表达式 一堆用法 没细看 比如%[0-9]就是录入这几个数字 ^表示取反集 %[^\n]就表示了除 ...

了解了,三克油!
回复 使用道具 举报
★Joean_Zhou 发表于 2014-7-7 09:50
/*
输入一英文句子,将其中一切单词首字符转换成大写后输出。
*/

你这个单词的首字母如果是大写的话,就出现问题了
回复 使用道具 举报
shao 中级黑马 2015-5-26 22:47:06
14#
求助啊。。。。我也遇见同样的问题了额,scanf( "%[^\n]", c)这个是什么东西啊?  scanf("%s",c)不能接收空格额。。后面的 总是打印不出来
回复 使用道具 举报
shao 发表于 2015-5-26 22:47
求助啊。。。。我也遇见同样的问题了额,scanf( "%[^\n]", c)这个是什么东西啊?  scanf("%s",c)不能接收空 ...

scanf( "%[^\n]" 遇到回车结束
回复 使用道具 举报
tr2e 中级黑马 2015-8-22 11:13:03
16#

受教了 很感谢。
回复 使用道具 举报
多谢了              
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马