读书人

放假了过年了为防各位大神脑袋生锈

发布时间: 2013-02-27 10:48:11 作者: rapoo

放假了,过年了,为防各位大神脑袋生锈,特请教一题【新手】
本帖最后由 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;
}

读书人网 >C语言

热点推荐