【问题标题】:An extra input appears出现一个额外的输入
【发布时间】:2012-06-22 18:11:19
【问题描述】:

例如,当我为 num1 输入 2 并为 num2 输入 3 时,我希望在输入第二个数字后立即得到 8 作为输出。但是,程序希望我再输入一个整数,而我只是输入了一个像 242 这样的随机数,它仍然输出 8,这意味着它不会影响结果。所以我的问题是为什么会有第三个输入? 感谢您的帮助!

#include "stdafx.h"

int Power (int num1, int num2);

int main ()
{
    int a, b;
    puts ("Enter two numbers, a and b:\n");  
    scanf ("%i\n", &a);
    scanf ("%i\n", &b);
    printf ("%i\n", Power(a, b));
    return 0;
}

int Power (int num1, int num2)
{
    int sum=1;
    for (int i=1; i<=num2; i++){
        sum= sum*num1;
    }
    return sum;
}

【问题讨论】:

    标签: c input scanf


    【解决方案1】:

    去掉换行符:\n,在您的 scanf 格式字符串中,或​​者只使用单个 scanf,例如:

    scanf("%i%i", &a, &b);
    

    或者:

    scanf ("%i", &a);
    scanf ("%i", &b);
    

    【讨论】:

    • 即使单个scanf 应该删除\nscanf("%i%i", &amp;a, &amp;b) 就足够了。
    • 另外,注意%i 格式可能会给您带来超出您真正需要的东西。我想说%d 在这种情况下会更有意义。用户可能会惊讶地发现023 实际上被解释为19
    • 其实gets()已经被废弃了,试试getline()这个函数
    • @AndreyT 只是对 OP 的补充:这是因为 %i 将根据输入解释十进制、十六进制和八进制。如果输入前缀0x,数字将被视为十六进制,如果前缀为0,则数字将被视为八进制。
    • @cacho 谢谢你的提醒,我完全杀死了gets
    【解决方案2】:

    您的scanf() 不需要"\n"

    scanf ("%i", &a);
    scanf ("%i", &b);
    

    【讨论】:

      【解决方案3】:

      您应该在对scanf 的调用中从格式字符串中删除“\n”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 2021-07-22
        • 1970-01-01
        相关资源
        最近更新 更多