读取第一个非空白字符程序分析

C语言 码拜 10年前 (2015-05-11) 1147次浏览 0个评论
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char get_first(void);
int main(void)
{
	char a;
	while ((a = get_first()) != EOF)
	{
		printf_s("%c\n", a);
	}
	system("pause");
	return 0;
}

char get_first(void)
{
	int ch;
	ch = getchar();
	while (isspace(ch))
	{
		ch = getchar();
	}
	while (getchar() != ""\n"")
	{
		continue;
	}
	return ch;
}

上面这段代码和下面这段代码,经过运行我发现执行的功能都是输出第一个非空白字符,这是为什么,可以说这两个代码是等价的吗?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char get_first(void);
int main(void)
{
	char a;
	while ((a = get_first()) != EOF)
	{
		printf_s("%c\n", a);
	}
	system("pause");
	return 0;
}

char get_first(void)
{
	int ch;
	ch = getchar();
	while (isspace(ch))
	{
		ch = getchar();
	}
	while (getchar() != ""\n"")
	{
		;
	}
	return ch;
}

另外,定义的函数

char get_first(void)
{
	int ch;
	ch = getchar();
	while (isspace(ch))
	{
		ch = getchar();
	}
	while (getchar() != ""\n"")
	{
		;
	}
	return ch;
}

它的执行逻辑是怎样的,希望高手可以帮助解释一下,详细一点会比较理想啊。。谢谢各位了

5分
略作解释

  while (isspace(ch))   //这个while就可以读到第一个非空白字符
    {
        ch = getchar();
    }
    while (getchar() != ""\n"")  //读完一整行,为下一次判断作准备
    {
        continue; //这个有没有都是一回事
    }
首先,谢谢您的回答,还有一点不是很明白

 while (getchar() != ""\n"")  //读完一整行,为下一次判断作准备
    {
        continue; //这个有没有都是一回事
    }

这一句读取后不做任何操作吗?

@zhangxiangDavaid
5分
略作解释

  while (isspace(ch))   //这个while就可以读到第一个非空白字符
    {
        ch = getchar();
    }
    while (getchar() != ""\n"")  //读完一整行,为下一次判断作准备
    {
        continue; //这个有没有都是一回事
    }
引用 2 楼 yshj1182831071 的回复:

首先,谢谢您的回答,还有一点不是很明白

 while (getchar() != ""\n"")  //读完一整行,为下一次判断作准备
    {
        continue; //这个有没有都是一回事
    }

这一句读取后不做任何操作吗?

不用,读取位置已转到新的一行

10分
第一段代码就差一个continue吗?那个continue可以不用管的,就像楼上说的,有没有都一样。

get_first函数的执行逻辑,先找到第一个空白字符,然后将该行一个字符一个字符的读完(就是读到\n)
因为只要第一个字符,所以除了第一个字符,后面的字符没用,就不需要任何操作了。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明读取第一个非空白字符程序分析
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!