程序告诉用户一个数字是否可被另一个数字整除

时间:2014-04-17 14:35:43

标签: c newline scanf

int main()
{
    int num;
    int num2;
    printf("Enter two numbers\n");
    scanf("%i\n",&num);
    scanf("%i\n",&num2);

    if (num % num2 == 0){
        printf("%i is evenly divided by %i",num,num2);
    }
    else {
        printf("%i is not evenly divided by %i", num, num2);

    }
        return 0;
}

当我在终端中运行上面的代码时,会发生这种情况

Enter two numbers
3
4


dsfa
3 is not evenly divided by 4

我输入了两个数字,但是在我输入某种形式的文本之前没有任何反应(这就是随机的“dsfa”),然后程序将返回正确的printf语句。它必须是文本我不能只按下输入按钮(这是空格来自哪里)。为什么这个程序在用户输入两个数字后立即没有返回我想要的内容?

6 个答案:

答案 0 :(得分:3)

格式字符串中的'\n'或空格字符会占用输入中的整个(可能为空)空格字符序列。

因此scanf仅在遇到下一个非空白字符或输入流的结尾时返回。

答案 1 :(得分:1)

这是因为格式字符串'\n'中的scanf(对于格式字符串中的任何空格都是如此)将匹配任意数量的空白字符。只有在遇到非空白字符时它才会退出。

此外,%i转换说明符表示scanf将读取整数。如果输入的数字包含前导0,则该数字将被读作八进制数字(基数8)。如果输入数字包含0x0X,则该数字将被读取为十六进制数字(在基数16中)。否则,该数字将被读作十进制整数。确保你真的想要%i而不是总是读取十进制整数的%d

请注意,%i无论如何都会跳过前导空白字符。因此,您不需要'\n'格式字符串中的scanf来匹配换行符。

#include <stdio.h>

int main(void)
{
    int num;
    int num2;
    printf("Enter two numbers\n");
    scanf("%i", &num);
    scanf("%i", &num2);

    if (num % num2 == 0){
        printf("%i is evenly divided by %i\n", num, num2);
    }
    else 
    {
        printf("%i is not evenly divided by %i\n", num, num2);
    }
    return 0;
}

答案 2 :(得分:1)

请勿在{{1​​}}函数中使用'\n'。如果您想在输入后添加换行符,则可以在scanf()函数后添加printf("\n")如下(请注意,我已注释掉scanf()语句),

printf()

否则只需从scanf()函数中删除 printf("Enter two numbers\n"); scanf("%i", &num); // printf("\n"); scanf("%i", &num2); // printf("\n"); ,然后只写:

'\n'

或者您可以在 scanf("%i", &num); scanf("%i", &num2); 中输入两个值,如下所示:

scanf()

无论你喜欢什么!

答案 3 :(得分:0)

不要在scanf()中使用\n或任何额外的空格。使用

scanf("%i",&num);
scanf("%i",&num2);

程序将正确执行。

答案 4 :(得分:0)

删除'\n'个功能中的scanf();或第二个scanf();功能。 您只能使用一个scanf();函数来读取这两个数字。

scanf("%i %i", &num, &num2);

答案 5 :(得分:0)

永远不要在\n中使用scanf()

\n是一个转义序列,用于某些结果,如换行符,制表符等。

Go here for more info about Escape Sequence

因此,只需删除\n功能中的scanf()即可。除此之外,一切都是正确的..