| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1158 人关注过本帖
标题:编写一个程序读入一行输入,然后反向打印该行
只看楼主 加入收藏
wic
Rank: 2
等 级:论坛游民
帖 子:33
专家分:21
注 册:2010-2-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
编写一个程序读入一行输入,然后反向打印该行
这个题我在搜索的时候
发现以前有人在论坛提问过了,我没看懂
请大家看看我的程序哪出问题了。。。
问题是:
编写一个程序读入一行输入,然后反向打印该行。您可以把输入存储在一个char数组中;假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次读入一个字符,而且当您按下回车键时会产生换行字符(\n)。
我的错误程序是:
程序代码:
#include "stdio.h"
#include "string.h"
#define SIZE 255
int main()
{
    char zfc[SIZE];   
    int temp,i=0;
    while (scanf("%c",&zfc[i])!='\n')     //当碰到回车是结束循环输入
    {
        i++;
    }
    temp=strlen(zfc);    //统计字符串的长度
    for (i=temp-1;i>=0 ;i-- )
    {
        printf("%c",zfc[i]);
    }
}

问题是:为什么结束不了循环啊,'\n'用错了么??
非得输入255个字符才会结束?
搜索更多相关主题的帖子: 搜索 include 而且 
2011-01-24 10:22
wic
Rank: 2
等 级:论坛游民
帖 子:33
专家分:21
注 册:2010-2-9
收藏
得分:0 
谢谢大家指点
2011-01-24 10:22
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:10 
回复 楼主 wic
先定义char a;→_→while ((a=getchar())!=' \n ' )

[ 本帖最后由 A13433758072 于 2011-1-24 12:13 编辑 ]

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-01-24 10:46
Amy_huyier
Rank: 4
等 级:业余侠客
帖 子:46
专家分:265
注 册:2011-1-24
收藏
得分:10 
你可以查一下scanf返回值。它是不会返回你输入的字符的,所以循环不可能结束。
可以吧scanf()换成getchar()。它会返回你输入的字符。
2011-01-24 11:24
wic
Rank: 2
等 级:论坛游民
帖 子:33
专家分:21
注 册:2010-2-9
收藏
得分:0 
恕小弟愚钝啊,怎么还是不成功。
char c;
while((c=scanf("%c",&zfc[i]))!='\n')

or


while((zfc[i]=getchar())!='\n')
2011-01-24 12:28
wic
Rank: 2
等 级:论坛游民
帖 子:33
专家分:21
注 册:2010-2-9
收藏
得分:0 
回复 4楼 Amy_huyier
谢谢大家热心帮助,辛苦了。
另:
怎么查scanf的返回值呀,用编程工具还是啥?
2011-01-24 12:34
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 6楼 wic
int a;
a=scanf(...........)    当程序正确读取时,就返回正值,当错误读取时就 返回负值

如 要 读取%d...........时你 输入'h'程序就 返回负值
正确就 返回正值

正确时返回的 数字是和 你 读取的 个数有关的

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-01-24 12:58
gavinsurekam
Rank: 2
等 级:论坛游民
帖 子:15
专家分:15
注 册:2010-12-25
收藏
得分:0 
写法尽量写简单的情况!!
2011-01-24 15:01
Amy_huyier
Rank: 4
等 级:业余侠客
帖 子:46
专家分:265
注 册:2011-1-24
收藏
得分:0 
回复 4楼 Amy_huyier
谢谢大家热心帮助,辛苦了。
另:
怎么查scanf的返回值呀,用编程工具还是啥?


给你网站:
http://www.
2011-01-26 12:48
langren2526
Rank: 2
等 级:论坛游民
帖 子:46
专家分:37
注 册:2010-3-12
收藏
得分:0 
#include <stdio.h>
#include <string.h>

#define SIZE 255

int main()
{
    char zfc[SIZE];   
    int temp,i=0;
    int x;  

    while (scanf("%c", &zfc[i]) == 1 && zfc[i] != '\n')   
        i++;            

    for (x = i - 1; x >= 0 ; x-- ) //i - 1只是剔除了数组中的'\n'。可以用i代替i - 1看看。
        printf("%c", zfc[x]);
    printf ("\n======================分割线==============================\n");
   

    temp = strlen (zfc);  //%c只是读取字符,输入结束并不会在数组中自动添加'\0'结束符。
                         //数组没有初始化,所以zfc数组中都是垃圾值。最理想的情况是在
                         //zfc[255]这一项中本身就是个'\0'符,否则strlen函数会在超出数
                        //组范围外的内存中继续查找,直到遇到'\0'符。
    for (x = temp - 1; x >= 0; x--)
        printf ("%c", zfc[x]);   

    printf ("\ntemp = %d\n", temp); //temp的值不是预想的值????temp也可能不是256;
    printf ("======================分割线==============================\n");
   

    printf ("输入与第一次相同的字符串,以便比较。\n");
    scanf ("%s", zfc);    //这里用的是 %s 。上面用的是 %c 。
    temp = strlen (zfc);

    for (x = temp - 1; x >= 0; x--)
        printf ("%c", zfc[x]);
    printf ("\ntemp = %d\n", temp);

    return 0;
}

不知道说的是否恰当。
2011-01-27 18:37
快速回复:编写一个程序读入一行输入,然后反向打印该行
数据加载中...
 
   



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

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