我做了以下但是它跳过了我必须输入角色的部分而我不明白我的错误是什么。有什么帮助吗?
#include <stdio.h>
main()
{
int num;
float f;
char c;
printf("Input an integer: ");
scanf_s("%d", &num);
printf("Input an floating point number: ");
scanf_s("%f", &f);
printf("Input a character: ");
scanf_s("%c", &c);
printf("\nThe number is: %d\n",num);
printf("\nThe floating point number is: %f\n", f);
printf("\nThe character is: %c\n", c);
return 0;
}
答案 0 :(得分:4)
如果我没错,您的scanf_s("%c", &c);
会读取&#39; \ n&#39;来自先前输入的字符。
你可以做的是在%c之前添加1个空格:
scanf_s(" %c", &c);
这将解决您的问题。请记住,如果在之前的输入后读取一个字符,则需要这样做。 经过测试和工作。
答案 1 :(得分:4)
scanf_s("%d", &d);
只要字符符合"%d"
格式,它就会读取字符。不符合该格式的第一个字符是您输入的换行符。这仍然在输入流中。
scanf_s("%f", &f);
此跳过前导空格(即您的换行符),然后只要符合"%f"
格式就会读取字符。不符合该格式的第一个字符是您输入的换行符。这仍然在输入流中。
scanf_s("%c", &c);
这会从输入中读取一个字符,而不会跳过潜在的空白,即您的换行符。
它也是未定义的行为:scanf_s()
与标准scanf()
的不同之处在于它需要一个&#34;缓冲区大小&#34; %c
和%s
的数字参数,以避免缓冲区溢出。不给该参数使scanf_s()
从堆栈中拉出一个整数,而你没有放置一个整数,导致未定义的行为。如果下一个内存地址发生为零,那么你会打得很多,我会打赌...
答案 2 :(得分:-1)
指定尺寸。使用此行:
scanf_s("%c", &c, 1);
它应该有用!