当先输入数值型数据,再输入字符型数据时,输入数值型数据时会残留一个' '或'\n',影响后续字符数据的输入。
当先输入一个数值型数据时,会直接把这个数值输出,不再给我们输入字符型数据的机会。
解决方法:
1、调整输入顺序,先字符再数值
2、增加一个空白的字符输入语句
getchar();
scanf("%*c");
3、在%c的前面加个空格
scanf(" %c",&ch);
scanf("%s",str); 不能输入带空格的字符串。
gets(str); 不限制用户输入的字符数量,可能会造成段错误,有安全隐患,标准库已经不建议使用。
fgets(str,sizeof(str),stdin);
优点:用户最多输入size-个字符,不可能产生段错误,安全性高,也能输入带空格的字符串。
缺点:
1、如果用户输入的字符不足size-1个,fgets会边'\n'也读取了
2、如果用户输入的字符超过size-1个,fgets只读取size-1个字符,剩余的字符会残留在输入缓冲中,影响后续数据的输入。