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
语句。它必须是文本我不能只按下输入按钮(这是空格来自哪里)。为什么这个程序在用户输入两个数字后立即没有返回我想要的内容?
答案 0 :(得分:3)
格式字符串中的'\n'
或空格字符会占用输入中的整个(可能为空)空格字符序列。
因此scanf
仅在遇到下一个非空白字符或输入流的结尾时返回。
答案 1 :(得分:1)
这是因为格式字符串'\n'
中的scanf
(对于格式字符串中的任何空格都是如此)将匹配任意数量的空白字符。只有在遇到非空白字符时它才会退出。
此外,%i
转换说明符表示scanf
将读取整数。如果输入的数字包含前导0
,则该数字将被读作八进制数字(基数8
)。如果输入数字包含0x
或0X
,则该数字将被读取为十六进制数字(在基数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()
即可。除此之外,一切都是正确的..