王道c语言督学营day10作业
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
int i;
int c;
char* p;
scanf("%d\n", &i);
p = (char*)malloc(i);
gets(p);
puts(p);
}
scanf运行后,会在缓冲区留下一个'\n',接着使用gets时,gets会先读取缓冲区中的'\n',导致程序直接结束不能输入,或者读取数值为空。
解决办法:scanf("%s\n",&a);
在%s后加上一个换行符。
gets()和scanf()的格式
1,scanf()默认读到空格,回车,制表符,空白等停止,不读以上字符。
2,gets()默认读到回车符停止不读回车符。
(在输入123回车符时,第一次读入123赋给a,下一个为回车符停止,gets()读入时,下一个为回车符,读入为空)
3,scanf()在除了读入值赋给变量的功能外,还能“吃”掉特殊字符。e.g.scanf("%s\n",b) 和 scanf("%s",b) 不同,前者能吃掉一个回车符。