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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© duocaikatong 中级黑马   /  2014-12-24 21:16  /  5495 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2黑马币
#include <stdio.h>
int main()
{
    char str[100];
    printf("请输入一段英文句子:\n");
    scanf("%s",str);
    printf("%s\n",str);
   
}为什么输入句子hello java world 运行结果只能打出hello呢,好像有空格就不能输出了。

最佳答案

查看完整内容

这个题目能做,你这个代码不能实现,要改的,下面是我看到其他同学的做法,拿过来给你看一下吧 #include int main(int argc, const char * argv[]) { printf("请输入一段英文:\n"); char a[100]; //定义一个数组接收字符串 char *p = a; //定义一指针指向数组首元素 gets(a); //输入一句英文 if(*p != ' '&& *p >='a' && *p ='A' && *p ='a' && *p ...

22 个回复

倒序浏览
duocaikatong 发表于 2014-12-25 00:43
输入一英文句子,将其中所有单词首字符转换成大写后输出。那这个题目里面不能输入空格吗? ...

这个题目能做,你这个代码不能实现,要改的,下面是我看到其他同学的做法,拿过来给你看一下吧
#include <stdio.h>

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

        if(*p != ' '&& *p >='a' && *p <='z' )  //如果不为空格且是小写
        {
                        *p -= 32;
            p++;
        }
                else if(*p != ' '&& *p >='A' && *p <='Z') // 如果不为空格且是大写
                {
                        p++;
                }
        else if(*p == ' ')  // 如果为空格
        {
            p++;
        }   
    while(*p != '\0')  //循环直到遇到\0
    {
        
      if(*p != ' ')  //如果不为空格就继续判断
        {
            p++;
        }
        else if(*p == ' ')  //如果检测到了空格就使下一个字母变为大写
        {
            p++;
            if(*p >='a' && *p <='z' )
                *p -= 32;
        }
    }
   
    puts(a);  //输出a
   
    return 0;
}
回复 使用道具 举报
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hello后面加 \0 ,所以只会显示出hello一个字符,可以看一下strcpy函数,或者str[0]='h';str[1]='e'....
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

输入一英文句子,将其中所有单词首字符转换成大写后输出。那这个题目里面不能输入空格吗?
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)那这种问题怎么破呢?如果输入单词后面有空格就没了?
回复 使用道具 举报
还有strcpy函数你可以看看的
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:57
还有strcpy函数你可以看看的

这个李明杰的基础视频都没有讲strcpy和gets() puts()方法,考黑马会考这些啊
回复 使用道具 举报
小徐_y8nUx 来自手机 中级黑马 2014-12-25 09:36:42
8#
学习了!!
回复 使用道具 举报
寻觅 中级黑马 2014-12-25 10:33:43
9#
我是过来学习的,对于c的输入和输出不太懂
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

应该是与空格有关,scanf函数直接操作的是地址不是赋值,所以与这个什么“不是初始化时,数组不能被整体赋值”无关。
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

scanf函数操作的是地址,不是赋值,所以与“不是初始化时,数组不能被整体赋值”无关,而且事实证明:只要不空格 字符串就可以完整的输出,如果是赋值运算,难道没初始化的同时,你可以把字符串赋值给字符数组?
回复 使用道具 举报
所以只与空格有关
回复 使用道具 举报
你输出的时候printf("%s\n",str);那个str是数组名,代表地址,输出时就会依次输出,直到遇到\0为止,而在字符串中,空格就被看成\0了吧,我也不太清楚,感觉是这样
回复 使用道具 举报
你把scanf("%s",str);这句换为gets(str);
回复 使用道具 举报
上一个说错了,不是printf的问题,是scanf("%s",str);的问题
回复 使用道具 举报
这个问题说明你的scanf函数没掌握,你使用scanf接收一个字符串,而 scanf从键盘读取你的输入字符串,肯定是需要一个终止符的,空格回车tab都是终止符,所以你后面的数据是无法被读取的。
回复 使用道具 举报
不能使用scanf标准格式输入,只能使用gets(&str),虽然这样有warning!
回复 使用道具 举报

scanf函数操作的是地址,不是赋值,所以与“不是初始化时,数组不能被整体赋值”无关,而且事实证明:只要不空格 字符串就可以完整的输出,如果是赋值运算,难道没初始化的同时,你可以把字符串赋值给字符数组?
回复 使用道具 举报
楼主这节奏是C语言入门后 在学java、IOS???
回复 使用道具 举报
scanf 读到空格就结束输入环节  读字符串要用gets 等语句读到回车结束
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马