关于C语言一个简单问题请教!

来源:百度知道 编辑:UC知道 时间:2024/05/10 11:22:32
输入一个字符串。要求空格也录入。我知道用gets函数,用scanf会遇到空格终止,但是我看到一位朋友是用这样的方法:

char str[100];
scanf("%[^\n]",str);

我试过了。也可以输入含有空格的字符串,请问这是什么原理??
那个“%[^\n]”是什么东东?我怎么从没学过?是标准C的语法么?还是C++?
我是用DEV-C++调试的。。。谢了!!

“%[^\n]”这其实是一个判断 "^"这个运算符为 "异或" 运算符,进行异或操作。即当你输入字符时,系统接受字符与"\n"进行异或操作。相同(两者都为真或两者都为假)时,逻辑异或后即为假,不同(一方为真,一方为假)时,逻辑异或后即为真

这种不好理解,你可以这样:
getchar(a)对回车换行符也进行处理,它是以回车作为输入结束的标志;
scanf("%s",a)不对回车换行符进行处理,它是以空格作为字符串输入结束的标志。

这个并不是正则表达式, scanf只是在读string时候允许用一个简单的语法,就是在[]里列出允许的字符或者[^]列出不允许的字符

[^\n]是1个正则表达式,意思是符合非\n ^是非的意思\n就是空格
scanf函数的参数支持正则表达式,scanf("%[^\n]",str); 这句话的意思就是读入字符串到str并且忽略空格。

C就有了的 [^\n]貌似是非空格 char str[100];定义str里面数值为字符串长度为100, scanf("%[^\n]",str); 把输入的值给STR并且忽视空格

好好学学正则吧