遇到的一个关于printf()的小问题。

    一直以为我这个程序可以像我想象的那样,只有当我输入的字符串只有以 ‘#’结尾的时候才结束继而打印出每个字符对应的字符及编码对,可出人意料的是当我不小心直接在输入的字符串后面键入回车后(之前未键入#),它直接给我打印出来了!但程序并没有就此结束,而是当我敲一个回车后它就换行打印一次。如此进行下去。

     自己在这里歪想了一阵,现在解释如下,如有过路的好汉,欢迎评论。

     printf()函数在输出的时候通常是先将输出传给一个中介BUFFER,BUFFER中的内容在不断地传递给屏幕。而在这段程序中输入的字符串的时候,输入是默认以回车符结束的,1.因此在我输入一串不以‘#’结尾的字符串以回车结束后,程序主体将对这串字符进行处理,并将对这个字符串处理后的结果输出到BUFFER中,再刷新BUFFER将其输出到屏幕。2.当我再次敲入回车过后,系统以为又是另外一个字符串到来了,将对这个再次的输入进行处理(虽然只有一个换行符),所以这里的屏幕上的输出将另起一行。

 

#include <stdio.h>
#define STOP '#'
int main(void)
{
      char ch;
      int Counter = 0;

      while((ch = getchar()) != STOP)
      {
            if(ch == '/n' )
                    printf("ch= NL/%d; ",ch);             
            else
                    printf("ch= %c/%d; ",ch,ch);
           if(!(++Counter % 8))
                    putchar('/n');
      }
}

2009-6-9

 

新的修改:

其实现在可以这样做,找一个足够大的字符数组,令其存放输入的字符串,然后再对这个字符串进行处理,合理选择判决条件以达到要求。

gets(ch)

while(ch[i] != '/n' && ch[i] != '# ')

 很显然,有一点还是需要说明,即我们不能希望所输入的字符串中出现多个换行符,因为只有在我们回车的时候才会出现换行符,同时你的这轮输入也就结束了。

 2009-7-4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值