scanf 与gets一块使用时,所遇到的问题

王道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) 不同,前者能吃掉一个回车符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值