| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1332 人关注过本帖
标题:c primer plus 第六章循环的第 14 题
只看楼主 加入收藏
ctl184762651
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2014-5-31
结帖率:93.75%
收藏
已结贴  问题点数:9 回复次数:19 
c primer plus 第六章循环的第 14 题
题目为:14.编写一个程序读入一行输入,然后反向打印该行。您可以把输入存储在一个char数组中;假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次读入一个字符,而且当您按下回车键时会产生换行字符(\n)。
可我发现用%c来输入根本没法做,用%s的话很简单。程序不知道要输入几个字符。除非指定了要输入多少字符,像下面这样,而且题目的最后一句我不理解是什么意思。难道就是说用%c来做的时候,不足的元素用空格或者回车来代替吗?
程序代码:
#include<stdio.h>
#define LENGTH 20
int main(void)
{ 
char a[255]; 
int i; 
for(i=0;i<LENGTH;i++) 
scanf("%c",&a[i]); 
for(i=LENGTH-1;i>=0;i--) 
printf("%c",a[i]); 
printf("\n"); 
return(0);
}
搜索更多相关主题的帖子: 元素 而且 
2014-09-09 18:55
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:2 
简单说说:
希望对你有所帮助,完成一个目的,方式很多种。
我们已知:scanf(%c) 可以接收换行符,scanf(%s)把换行当成了结束符。
我们可以根据题目要求(我们假设是 遇到回车换行符就停止字符录入)
如果使用scanf(%c),我们也是可以完成任务的,我给你一个思路,在while循环体里面,scanf(%c)然后判断是不是回车,
然后自己发挥。。
如果使用scanf(%s),我们需要先储存字符数组,然后方式很多种都可以逆序输出。
2014-09-09 19:09
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
#include<stdio.h>
int main(void)
{
char a[255];
int i=0;
while(1)
{
    scanf("%c",&a[i]);
    if(a[i]=='\n') {a[i]='\0';break;}
    i++;
}
i--;
for(;i>=0;i--)
printf("%c",a[i]);
printf("\n");
return(0);
}
2014-09-09 19:14
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
#include<stdio.h>
int main(void)
{
char a[255];
int i=0;
while(1)
{
    scanf("%c",&a[i]);
    if(a[i]=='\n') {a[i]='\0';break;}
    i++;
}
i--;
for(;i>=0;i--)
printf("%c",a[i]);
printf("\n");
return(0);
}
2014-09-09 19:14
Coincedence4
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:52
专家分:151
注 册:2014-9-4
收藏
得分:2 
数组如果没有被初始化,数组元素是不确定的。
如果已经初始化,但是又像你说的那样后面的元素没有赋值,这时候编译器会静态处理,填充为0。0在ACS表中为'\0’。所以对于数值型数组,未被初始化话的填充为0;字符型的填充为‘\0’,字符串在用字符数组存储的时候会在最后一位填充'\0'。
2014-09-09 20:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
只能用scanf()的%c或getchar()来做,用%s是不行的。

授人以渔,不授人以鱼。
2014-09-09 21:32
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:2 
char数组不是说就一定是一个字符串,需要'\0'结尾。只需要统计输入了几个字符,然后逆向输出就行了。
2014-09-09 21:47
Coincedence4
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:52
专家分:151
注 册:2014-9-4
收藏
得分:0 
纠正一下,字符'\0'对应数值就是0,但是0是ASC中的NULL不是ASC中'\0',我也不知道这是为什么。你说的%c方式,不足的元素确实用'\0',但是初始化的时候要用类似与这种形式char a[]={'a','b'};如果用scanf格式你只能老老实实的输入,回车也算进去了。或者在scanf方式输入是加个判断输入到某个字符时候停止。
2014-09-09 21:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 楼主 ctl184762651
看那本书怎么会写出这种风格的代码,怪了。不过我其实也没看过那书,但看1楼这风格应归功于谭老师才对。

授人以渔,不授人以鱼。
2014-09-09 22:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

const size_t MaxLength = 255;

int main(void)
{
    char buffer[MaxLength + 1] = { '\0' };
    size_t index;

    for (index = 0; index < MaxLength; ++index)
    {
        buffer[index] = getchar();
        if (buffer[index] == '\n')
        {
            buffer[index] = '\0';
            break;
        }
    }

    for ( ; index > 0; --index)
    {
        putchar(buffer[index - 1]);
    }
    putchar('\n');

    printf_s("\nPress any key to continue...");
    _getch();
    return EXIT_SUCCESS;
}




[ 本帖最后由 TonyDeng 于 2014-9-9 22:48 编辑 ]

授人以渔,不授人以鱼。
2014-09-09 22:46
快速回复:c primer plus 第六章循环的第 14 题
数据加载中...
 
   



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

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