其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

scanf的正则表达式问题

GG网络技术分享 2025-03-18 16:15 6


问题描述:

void main() 

{

char className[100] = { 0 };

char windowName[100] = { 0 };

printf(\"请输入窗口的标题名:\\n\");

int n2 = scanf(\"%[^\\n]\", windowName);

printf(\"请输入窗口的类名:\\n\");

//getchar(); //不加这一句classname为空

int n1 = scanf(\"%[^\\n]\", className);

windowDoubleCircle(className, windowName);

}

为什么scanf使用正则表达式,[^\\n],将回车当作结束符后,第二个scanf无法正常工作呢?

windowName可以得到正确的结果,遇到回车结束

但是第二个就不行了,一直为空

我自己的猜测是输入第一个字符串时的回车被第二个scanf直接读入了,然后就直接结束。

加入getchar后果然正常了。

但是这里我就很困惑了,不用正则表达式不也是以回车(或者空格)来结束吗,为什么正常的scanf连用能够正常工作(这里指输入一个字符串,然后回车,然后再输入一个字符串)呢?

网友观点:

因为遇到回车,前面的读取到className,但是回车本身没有读
所以不加getchar,第二次读取,直接就回车,自然就是空。
除了用getchar()也可以写fflush(stdin);

C语言 为什么scanf("%s",a),我输入123空格123,但是输出的只有123,为什么?

这个跟scanf的实现机制有关系。scanf默认在碰到空格等制表符的时候自动把字符串截断,只识别到了第一个空格前的123。

可以使用这个正则表达式的方式

scanf("%[^\\n]",a);

标签:

提交需求或反馈

Demand feedback