scanf 的输入格式与 EOF 如何结束循环

参考:

https://www.cnblogs.com/xyl-share-happy/archive/2012/08/28/2660873.html

https://blog.csdn.net/jeffasd/article/details/80705487

 

 

1,scanf("%d", &n)

  ① 以回车作为输出的结束标志。

  ② 返回值为 EOF,可以按下下述按钮结束循环,

    ctrl+z ->回车 -> ctrl+z -> 回车 ->ctrl+z ->回车

 

2,scanf("%s", s)

  ① 以空白字符作为输出的结束标志,该空白字符会被丢弃,但要回车才能进入循环体内。

  ② 返回值为 EOF,可以按下下述按钮结束循环,

    ctrl+z ->回车 -> ctrl+z -> 回车 ->ctrl+z ->回车

 

3,scanf(“%[^\n]”, str);    

  ① 以回车作为输出的结束标志,该空白字符并不会被丢弃。

    所以要想办法读取掉,不然回车一直无法被读取,也不会被丢弃,一直在循环。

  ② 返回值为 EOF,可以按下下述按钮结束循环,

    ctrl+z ->回车 -> ctrl+z -> 回车

 

4,scanf("%[^\n]%*c", str);  

  在 3 的基础上,利用 %*c 读入回车。其它都与 3 一样。

  可以利用这个实现一次循环读取两个以回车分隔开的字符串。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
char s1[N];
char s2[N];
int main(void)
{
	while (scanf("%[^\n]%*c%[^\n]%*c", s1, s2) != EOF)
	{
		for (int i = 0; i < strlen(s1); i++)
			printf("%c", s1[i]);
		puts("");
		for (int i = 0; i < strlen(s2); i++)
			printf("%c", s2[i]);
		puts("");
	}
	system("pause");
	return 0;
}

 

 

========== ======== ======= ====== ====== ===== ==== === == =

 

posted @ 2020-02-21 20:48  叫我妖道  阅读(1341)  评论(0编辑  收藏  举报
~~加载中~~