久负盛名的K&R C Bible里面练习时出现的问题,希望大家帮忙一起分析下是什么原因!
菜鸟一枚,最近在读K&R C Bible自己尝试着编写了下第一章的几个练习,最后发现出现了问题,百思不得其解,希望大家能够帮助下看看是什么问题:
Q1:编写一个程序,将输入的信息在屏幕上输出,并将连续的多个空格转换成一个空格输出。eg: 1234 5678===>1234 5678
我的code:
#include <stdio.h>
#include <stdlib.h>
#define OUT 0
#define IN 1
main()
{
int c, state;
state=IN;
printf("This is a minyfunction designed to omit blanks you typed in into one blank\n");
printf("Please type in 'Control + Z ' in a new line when you have finished typing\n");
while ((c=getchar())!=EOF)
{
if ((c=getchar())!=' ')
{
if (state==OUT)
{
printf(" ");
state=IN;
putchar(c);
}
else putchar(c);
}
else state=OUT;
}
system("Pause");
}
按照方框图,逻辑上应该没有问题,测试中多个空格的合并也成功了,只是其他的字符会二缺一,即:1234 5678==>24 78
反复思考,也没有找出是什么原因。。。希望大家能够帮我这个菜鸟分析下究竟是什么原因。。。
Q2:编写程序,将输入的信息在键盘上输出,把其中的空格用“b”替换,缩进(TAB)用“\t”替换,斜杠(\)用“\\”替换。
我的code:
#include <stdio.h>
main()
{
int c;
while ((c=getchar()!=EOF))
{
if (c==' ')
{
printf("\\n");
}
else if (c=='\t')
{
printf("\\t");
}
else if (c=='\n')
{
printf("\\n");
}
else if (c=='\\')
{
printf("\\");
}
else
putchar(c);
}
system("Pause");
}
依旧按照逻辑框图应该没有问题,但是测试的时候,发现输出统统变成了笑脸符号。。。(测试环境VC2010),但是从笑脸符号的个数来看,如果对应着正确字符的话,貌似程序是正确的,希望大家能够帮助分析下这是什么原因。。。菜鸟遁地。。。