Small-K 2019-09-28 11:45 采纳率: 0%
浏览 443
已采纳

scanf的正则表达式问题

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连用能够正常工作(这里指输入一个字符串,然后回车,然后再输入一个字符串)呢?

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-09-28 12:25
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?