首页 > 解决方案 > 在 C 中使用 scanf("%19[^\n]",Input) 时出现问题

问题描述

所以基本上当我使用 scanf("%19[^\n]", Input); 我的输出有问题。

    #include <stdio.h>
    #include <stdlib.h>

    void inputTime();

    int main()
    {
        int test = 0;
       do
       {
         inputTime();
         test++;
       } while (test!=2);

       return 0;
    }
    void inputTime()
    {

       char Input[20];
         printf("Test : ");
          *Input = '\0';
          scanf("%19[^\n]", Input);
    }

在我的 char[] 的第一次输入之后,程序和 [^\n] 不能让我输出两次。这是我在输出中得到的:

测试:SomeString
测试://无法输入第二个字符串
进程返回 0 (0x0) 执行时间:11.599 s
按任意键继续。

但是,如果我将 scanf("%19[^\n]", Input) 更改为 scanf("%19s", Input) 它可以正常工作

测试:SomeString
Test : AnotherString //现在可以在这里写了
进程返回 0 (0x0) 执行时间:11.599 s
按任意键继续。

使用 scanf("%19[^\n]", Input) 时如何获得相同的结果?

标签: c

解决方案


在我的 char[] 的第一次输入之后,程序和 [^\n] 不能让我输出两次。但是,如果我改成scanf("%19[^\n]", Input)scanf("%19s", Input)可以正常工作。

这是因为%[转换说明符在:

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

与转换说明符相反%s,不会跳过前导空白字符,例如在循环的上一次迭代中从上一次调用中\nReturn向左输入的(换行符) 。stdinmain

在之前添加一个空格字符指令%[

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

getchar()或者在捕捉左边之前插入一个呼叫newline


推荐阅读