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;
}