【发布时间】:2021-03-19 13:24:30
【问题描述】:
在执行下面的代码时,输出结果是
输入活动选择:你好
在输入活动数量并输入活动后。 scanf() 将被完全跳过。
我尝试了在互联网上找到的所有内容,例如使用getchar() 而不是scanf(),在输入之前放置getchar() 并使用fflush()。
但似乎没有任何效果。谁能告诉我我犯了什么错误?
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char name;
int start;
int finish;
}activity;
int main()
{
int n;
printf("Enter number of activities: ");
scanf("%d",&n);
activity* a = (activity*)malloc(sizeof(activity)*n);
printf("Enter activities: ");
for(int i=0;i<n;i++)
{
scanf("%c %d %d ",&(a[i].name),&(a[i].start),&(a[i].finish));
}
//getchar();
char ch;
int s,f;
printf("Enter activity selected:");
//fflush(stdin);
//scanf(" %c",&ch);
ch = getchar();
printf("hello");
return 0;
}
【问题讨论】:
-
%c之前没有空格,所以它读取前一个scanf留下的换行符。 -
你为什么要评论
scanf(" %c",&ch);,那会等你输入,ch = getchar();你必须手动完成 -
//scanf(" %c",&ch);这里%c前面有个空格。 -
我指的是循环中的
scanf("%c。顺便说一句,您应该检查来自scanf的返回值以确保它有效。 -
@IrAM 我刚刚测试了
ch = getchar(),在scanf(" %c",&ch);不起作用之后。