LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 811|回复: 11

用getchar()函数读取的字符可以用printf()读取吗?

[复制链接]
发表于 2003-7-12 19:52:54 | 显示全部楼层 |阅读模式
我写了一个菜鸟程序,用getchar()函数循环将字符存入一个数组后,用printf("%s",XX) (XX为相应的参数)读不出来,只能用循环的prntf("%c",XX)读出来。现在我想用printf("%s",XX)这个语句读取数组内的字符

#include<stdio.h>

int main(void)
{
        int a=0,b=0,i=0;
        char ch[30];

        while ((ch=getchar()) != '\n')
        {
                i++;
        }
        i=0;
        while (ch != '#')
        {
                if (ch=='e' && ch[i+1]=='i')
                        a++;
                i++;
        }
        i=0;
        while (ch != '#')    //在这我想用printf("%s",ch)
        {                              //
        printf("%c",ch);     //
        i++;                         //
        }                              //来代替printf("%c",ch)可以做到吗??
        printf ("一共出现了%d\n",a);
return 0;
}
自由狼-台风 该用户已被删除
发表于 2003-7-12 20:12:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2003-7-12 20:25:22 | 显示全部楼层
字符串必须以0结尾。
自由狼-台风 该用户已被删除
发表于 2003-7-12 20:35:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
自由狼-台风 该用户已被删除
发表于 2003-7-12 20:51:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2003-7-12 20:52:19 | 显示全部楼层
最初由 libinary 发表
字符串必须以0结尾。


应该是'\0'吧;)
发表于 2003-7-12 20:55:04 | 显示全部楼层
mmm
我的0周围可没有单引号或双引号呀,数据类型是int
发表于 2003-7-12 21:14:14 | 显示全部楼层
to YSM:
你的代码我试了,没有问题,可以用printf("%s",ch);
只是两种代码都有一个问题:当输入超过30个字符时,会出现段错误。
  1. while ((ch[i]=getchar()) != '\n')
  2. {
  3.         i++;
  4.         if(i==29);
  5.         {
  6.                 ch[i]='\0';
  7.                 break;
  8.         }
  9. }
复制代码
这样你就不用以“#”做为结束标志了
 楼主| 发表于 2003-7-12 23:27:26 | 显示全部楼层
程序改了一下,但有些问题要请教。

#include<stdio.h>

int main(void)
{
        int a=0,b=0,i=0;
        char ch[30];

        for(i=0;i<30;i++)//方法1:把数组内容置0
                ch=0;

        for(i=0;i<29;i++)//在你的数组被填满之前循环
        {
                ch=getchar();//把字符输入你的数字
                if(ch=='\n')//一旦输入为“\n”
                {
                        ch=0;//方法2:把最后一个输入置0
                        break;//就终止循环
                }
        }
                                                           //数组里有“#”或大于30的时候停止循环
        for (i=0;ch != '#' && i<30;i++)  //但改为for (i=0;ch != '#' || i<30;i++)时
        {                                                //不管输入什么会出现段错误,这是为什么
                                                           //而且用 || 的时候不管是哪个都是真的呀

                if (ch=='e' && ch[i+1]=='i')  //如果数组中有“ei”序列
                        a++;//记数+1
        }
        printf("%s",ch);
        printf ("一共出现了%d个有效序列\n",a);
return 0;
}
发表于 2003-7-13 00:13:18 | 显示全部楼层
但改为for (i=0;ch != '#' || i<30;i++)时不管输入什么会出现段错误,这是为什么,而且用 || 的时候不管是哪个都是真的呀

想想||的意思,两个里面有一个为真就为真。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表