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;
}
输入回车便结束。