| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 771 人关注过本帖
标题:《c primer plus》里面第 11 章的课后练习题第 2 题,自己编的感觉没错啊, ...
只看楼主 加入收藏
pokerLee
Rank: 2
等 级:论坛游民
帖 子:41
专家分:29
注 册:2012-11-4
结帖率:93.33%
收藏
已结贴  问题点数:20 回复次数:6 
《c primer plus》里面第 11 章的课后练习题第 2 题,自己编的感觉没错啊,为什么没有效果!!
《c primer plus》里面第11章字符串与字符串函数的课后练习题第2题,要求n个字符后遇到第一个空格、制表符、换行符后停止读取输入。参考答案用的是for()里嵌套if(),自己练习用while()。看好几遍了感觉没有错误,为什么输入空格、制表符、换行符后不能停止?求指点!!!!
程序代码:
#include<stdio.h>
#include<ctype.h>
void input(char *,int);
int main(void)
{
    char a[81];
    int n;
    puts("Enter the number of you want:");
    scanf("%d",&n);
    getchar();
    input(a,n);
    puts(a);
    return 0;
}
void input(char *str,int n)
{
    int i=0;
    puts("Enter str:");
    while(isspace(*(str+i))==NULL||i<n)
    {
        *(str+i)=getchar();
        i++;
    }
    *(str+i)='\0';
}
运行结果

搜索更多相关主题的帖子: 参考答案 练习题 换行符 制表符 字符串 
2014-10-16 20:30
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单说说:
while(isspace(*(str+i))==NULL||i<n) 应该是用与运算
2014-10-16 20:41
pokerLee
Rank: 2
等 级:论坛游民
帖 子:41
专家分:29
注 册:2012-11-4
收藏
得分:0 
回复 2 楼 erty1001
改成与运算符了~~&&~~~~也不行啊~~求指点~~
2014-10-16 20:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这个写法原先的for()就可以了?

授人以渔,不授人以鱼。
2014-10-17 00:00
修炼内功
Rank: 2
等 级:论坛游民
帖 子:6
专家分:49
注 册:2014-10-17
收藏
得分:20 
能停下来才怪,除非出现巧合,你的i>n且(str+i)的位置以前就是空白字符,而那是不确定的,你的前后逻辑有问题,i++;应该在 *(str+i)=getchar();之前,while之前加一个读入*str=getchar(),这个isspace(*(str+i))==NULL写法不好,让人误认为isspace(*(str+i))返回的是指针,可以直接写成!isspace(*(str+i)),而且你没加保护,万一输入的内容超过了数组长度呢。
2014-10-17 13:22
pokerLee
Rank: 2
等 级:论坛游民
帖 子:41
专家分:29
注 册:2012-11-4
收藏
得分:0 
回复 4 楼 TonyDeng
?什么意思?没明白,参考答案用的是for()循环,可以运行~~求指点~~
2014-10-17 21:31
修炼内功
Rank: 2
等 级:论坛游民
帖 子:6
专家分:49
注 册:2014-10-17
收藏
得分:0 
void input(char *str,int n)
{
    int i=0;
    puts("Enter str:");
    *str = getchar();
    while((!isspace(*(str+i))||i<n) && i < 80)
    {
        ++i;
        *(str+i)=getchar();
    }
    *(str+i)='\0';
}
你说的答案for循环我没见过,但是你写的代码是有问题的,你的第一次while循环,i=0,str+i指向数组的第一个元素,及*str,而在你判断前str所指的内容并不确定,你还没有读入赋值;而进入循环体后,你将读入的字符保存到了str所指向的位置,++i,此时i=1,str+i指向数组的第二个元素,此时第二个元素还没有赋值,你有拿去判断,能对吗?????答案给的for循环没问题,那么你修改成的while循环肯定和for循环对不上,自己多琢磨下
2014-10-20 14:33
快速回复:《c primer plus》里面第 11 章的课后练习题第 2 题,自己编的感觉没错 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026694 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved