【问题标题】:What is the difference between %*c%c and %c as a format specifier to scanf?%*c%c 和 %c 作为 scanf 的格式说明符有什么区别?
【发布时间】:2012-06-22 00:15:33
【问题描述】:

我通常使用%c 获取字符,但我见过使用%*c%c 的代码。例如:

char a;
scanf("%*c%c", &a);

有什么区别?

【问题讨论】:

  • 每一个说明符都在任何体面的书中都有描述。你在发帖前考虑过吗?
  • 是的,我试图找到但我发现了其他案例。我的书阐述了这些 char %c short, int, long %d short, int, long %i unsigned short, unsigned int, unsigned long %u float %f double %lf float, double (notazione sciencea) %e float, double [ usa il più breve tra %fe %e] %g short, int, long (formato ottale) %o short, int, long (formato esadecimale) %x puntatore %p sequenza di caratteri terminata da un '\0' %s unsigned long long [64-bit] %llu long long [64-bit] %ll long double [64-bit] %Lf unsigned short [8-bit] %hu 你能解释一下区别吗?请

标签: c special-characters


【解决方案1】:

根据Wikipedia

百分号后面的可选星号 (*) 表示 此格式说明符读取的数据不应存储在 多变的。不应包含格式字符串后面的参数 这个丢弃的变量。

这样您就可以跳过与该星号匹配的字符。

【讨论】:

    【解决方案2】:

    scanf 格式字符串中,在% 之后,* 字符是赋值抑制字符

    在您的示例中,它会吃掉第一个字符但不存储它。

    例如,用:

    char a;
    scanf("%c", &a);
    

    如果输入:xyz\n,(\n 是换行符)那么x 将存储在对象a 中。

    与:

    scanf("%*c%c", &a);
    

    如果输入:xyz\ny 将存储在对象a中。

    C 说用这种方式为scanf 指定*

    (C99, 7.19.6.2p10) 除非用 * 指示分配抑制,否则转换结果将放置在尚未收到转换结果的格式参数后面的第一个参数指向的对象中。

    【讨论】:

      【解决方案3】:

      基本上%c是指字符类型说明符,*%c用来排除一个字符这样字符将从控制台读取,但不会分配给任何变量。 例如。 -:

      假设输入是 31/12/2018 并且您只想以整数形式输出并且想要排除“/”字符,那么您可以在此处使用 %*c 作为 - scanf("%d%*c%d%*c%d" , &day,&month,&year);

      这样您就可以排除两个“/”字符。

      以类似的方式 %*d 用于排除一个整数, %*f 排除一个浮点数,%*s 排除字符串的一个单词。 希望它有所帮助:)

      【讨论】:

        猜你喜欢
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多