我设法制作了这个简单的两部分程序,它包含简单的打印和扫描功能。第一部分是加法操作,第二部分要求用户输入一个字母,然后将其重复给用户。第一部分进展顺利但是当它完成并且应该开始第二部分时它会在我输入一封信之前显示整个事情。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int num1, num2 = 522;/*input a number*/ /*add 522*/
int sum; /*sum of num1 and num2*/
char let; /*Letter to put in*/
printf("Hello, my name is John Doe.\n"); /*Print "Hello my name is*/
printf("Please type a number= "); /*Ask user for num1*/
scanf("%d", &num1); /*Scan for num1*/
sum = num1 + 522; /*Add 522 to num1*/
printf("The sum of %d and %d is %d\n", num1, num2, sum);/*print num1 and sum*/
printf("Please type a letter= \n"); /*Ask user for letter*/
scanf("%c", &let); /*Scan for letter*/
printf("You typed %c\n", let); /*Show the letter input*/
return 0;
}
答案 0 :(得分:7)
更改
scanf("%c", &let);
到
scanf(" %c", &let);
输入一个数字后会有一个换行符,因此%c
需要忽略它。请注意%c
答案 1 :(得分:0)
更好的方法是在每次scanf()/ getchar()调用后刷新输入缓冲区。
while ((ch = getchar()) != '\n' && ch != EOF);
但不要使用fflush(stdin),因为如果文件流用于输入,如stdin,则行为未定义,因此使用fflush()清除键盘输入是不可接受的。 像往常一样,有一些例外情况,请检查编译器的文档,看看它是否有一个(非便携式)方法来刷新输入。
您也可以使用getchar()函数来清理新行字符,但建议使用第一种方法。