C语言scanf读取一行产生的问题:多于一个换行符未读入

C语言scanf读取一行产生的问题:多于一个换行符未读入

问题描述

使用scanf读入一整行时,由于遇到\n停止,于是标准输入流里还有一个\n

而scanf是从第一个非空白符(空格、换行、tab)开始读取的,未读取成功返回0
由于标准输入流里的\n一直存在,因此scanf一直返回0,一直无法正常读取

例子:

#include<stdio.h>

int main(){
	char buf[100];
	
	while(1){
		scanf("%[^\n]",buf);
		printf("%s",buf);
	}
	return 0;
}

假如输入1,那么接下来将会无限循环输出1.(因为接下来每次scanf都未成功读取)

解决方法:

在后面加上getchar,“吸收掉换行符”

scanf("%[^\n]",buf)
getchar();

猜你喜欢

转载自blog.csdn.net/crabstew/article/details/88686302