scanf输入含有空格的字符串

1、可以使用scanf的扫描集来  扫描允许的字符串来接收用户输入的数据。如:以下代码
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
 
            char str[100];
            scanf("%[A-Z]", str);
            printf("%s\n", str);
        
    }
    return 0;
}

若用户输入 1112ABCD,再输入回车,则收不到用户的数据。只有用户输入A112,,再输入回车,才能接收到字符串"A"。而且,若输入ABCD,点击回车后,系统仍在等待用户输入内容,直到我输入1,再按回车,系统才停止接收数据。也就是说,scanf遇到不是扫描集中的字符,就退出。


我们的目的是:将除了回车以外所有字符都接收到,而且遇到空格就结束,因此,可以考虑,只接收用户输入的回车字符的补集。


2、将%[A-Z]改为%[^(A-Z)]来验证补集:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
 
            char str[100];
            scanf("%[^(A-Z)]", str);
            printf("%s\n", str);
        
    }
    return 0;
}
结果刚好颠倒过来。因此可以用%[^\n]来接收用户含有空格的字符串,以回车结束,避免了使用gets。


3、使用%[^\n]的验证:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
 
            char str[100];
            scanf("%[^\n]", str);
            printf("%s\n", str);
        
    }
    return 0;
}

输入回车便结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值