首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

放假了,过年了,为防各位大神脑袋生锈,特请问一题【新手】

2013-02-27 
放假了,过年了,为防各位大神脑袋生锈,特请教一题【新手】本帖最后由 DuanXu1 于 2013-02-09 16:54:38 编辑C

放假了,过年了,为防各位大神脑袋生锈,特请教一题【新手】
本帖最后由 DuanXu1 于 2013-02-09 16:54:38 编辑 C primer plus 第五版  p186 第2题:

题目叙述和我编的代码如下:

/*7.2.编写一个程序。该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的
      十进制ASCII码。每行打印8个字符/编码对。建议:利用字符计数和模运算符(%)在
  每8个循环周期时打印一个换行符。
*/

#include <stdio.h>
#define STOP '#'
#define NEWLINE 8            //每行打印的对数
int main (void)
{
char ch;
int count = 0;

printf ("Enter a line of text (# to terminate):\n");
while ((ch = getchar ()) != STOP)
{
if (ch == '\n')
printf ("\\n %3d   ", '\n');         //输出为可见字符
else if (ch == ' ')
printf ("Sp %3d   ", ' ');           //输出为可见字符
else
    printf ("%2c %3d   ", ch, ch);
if (++count % NEWLINE == 0)
printf ("\n");

}

getchar ();
getchar ();
return 0;
}


如果只输入一行
Enter a line of text (# to terminate):
This chapter has presented quite a few topics to review,#

输出如下:
 T  84    h 104    i 105    s 115   Sp  32    c  99    h 104    a  97
 p 112    t 116    e 101    r 114   Sp  32    h 104    a  97    s 115
Sp  32    p 112    r 114    e 101    s 115    e 101    n 110    t 116
 e 101    d 100   Sp  32    q 113    u 117    i 105    t 116    e 101
Sp  32    a  97   Sp  32    f 102    e 101    w 119   Sp  32    t 116
 o 111    p 112    i 105    c  99    s 115   Sp  32    t 116    o 111
Sp  32    r 114    e 101    v 118    i 105    e 101    w 119    ,  44

可是无法输入多行文本,因为在换行时会出现以下情况:
input:
Enter a line of text (# to terminate): 


Enter two lines


output:
                                c                  c?primer?plus              
[解决办法]
哪里输入了多行?
[解决办法]
当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符,所以你每次想换行时,实际上就调用while循环里面的输出语句了,自然不能输入两行了~
[解决办法]
额你可以自己设置缓冲区你可以将缓冲区设置成为缓冲区满时候输出的这样的话你就有可能实现输入多行
[解决办法]
本身提示不就是输入一行么。。。
[解决办法]
刚帮你试了好久,还是不行,
[解决办法]
你的多行是如何输入的,用 enter 换行还是自然换行
[解决办法]
可以实现多行输入,用的是tc
[解决办法]
引用:
引用:
你的多行是如何输入的,用 enter 换行还是自然换行是Enter换行


换行时如何了?在 vs2010下ok
[解决办法]
用函数:
getch
[解决办法]

#include <stdio.h> 
#define STOP '#' 
#define NEWLINE 8            //每行打印的对数 
int main (void) 
{     
char ch;     
    int count = 0; 
while(1)
{
   printf ("Enter a line of text (# to terminate):\n");    
   while ((ch = getchar ()) != STOP)     
    {        
if (ch == '\n')
printf ("\\n %3d   ", '\n');         //输出为可见字符         
else if (ch == ' ')            
printf ("Sp %3d   ", ' ');           //输出为可见字符         
else            
printf ("%2c %3d   ", ch, ch);    

if (++count % NEWLINE == 0)            


printf ("\n");              
    } 
      printf("\n");
       if((ch= getchar()) =='\n')
   continue;
}
return 0; 


[解决办法]
可以输入多行啊,只是不能在你输出数据之前输入多行,你输入回车,就将之前的数据处理并输出到屏幕上
[解决办法]
/*7.2.编写一个程序。该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的
      十进制ASCII码。每行打印8个字符/编码对。建议:利用字符计数和模运算符(%)在
  每8个循环周期时打印一个换行符。
*/

#include <stdio.h>
#define STOP '#'
#define NEWLINE 8            //每行打印的对数
int main (void)
{
charch;
intcount = 0;
charbuffer[1024] = {0};
intoffset = 0;

printf ("Enter a line of text (# to terminate):\n");
while ((ch = getchar ()) != STOP)
{
buffer[offset++] = ch;
}
for (int i = 0; i < offset; i++)
{
ch = buffer[i];
if (ch == '\n')
printf ("\\n %3d   ", '\n');         //输出为可见字符
else if (ch == ' ')
printf ("Sp %3d   ", ' ');           //输出为可见字符
else
printf ("%2c %3d   ", ch, ch);
if (++count % NEWLINE == 0)
printf ("\n");
}

getchar ();
getchar ();
return 0;
}

热点排行