我尝试编写一个程序,按照患者姓名和紧急程度的顺序指示步骤顺序。但我不知道如何填写输入并再次打印输出。
这是输入输出的一个例子:
这是一个不完整的代码。
#include <stdio.h>
#include <ctype.h>
#define fi 1000
int w;
char e;
struct quier {
int data[fi];
int front, near;
int overflow;
int underflow;
char title[fi];
};
void enqueue(struct quier *quier, int a, char b) {
if (quier -> near >- fi - 1) {
quier -> overflow = 1;
}
else {
quier -> near++;
quier -> data[quier -> near] = a;
quier -> title[quier -> near] = b;
}
}
void dequeue(struct quier *quier) {
if (quier -> front == quier -> near) {
quier -> underflow = 1;
}
else {
quier -> front++;
w = quier -> data[quier -> front];
e = quier -> title[quier -> front];
}
}
int main() {
struct quier quier;
quier.front = -1;
quier.near -1;
quier.overflow = 0;
quier.underflow = 0;
int x, i, v;
char k;
scanf("%d", &x);
for (i = 0; i < x; i++) {
scanf("&c %d", &k, &v);
enqueue(&quier, v, k);
}
}
答案 0 :(得分:1)
首先请注意Aditi Rawat,scanf
中的拼写错误scanf("%c %d", &k, &v);
当你使用scanf
时,你不应该忘记一件事,关于空白字符&#39; \ n&#39;在缓冲区。当您在第一个scanf
获得输入以读取循环的值并按&#34;输入&#34;按钮,它放入缓冲区&#39; \ n&#39; char然后在for
循环第一个char从scanf
读取a&#39; \ n&#39;。您应该清除输入缓冲区以获得正确的值。这里有一些例子:
编写一个清除缓冲区的函数,并在每个scanf
之后调用它:
void clear_buff(void)
{
while ((c = getchar()) != '\n' && c != EOF)
;
}
解决此问题的一种方法是在转换说明符之前的格式字符串中放置一个空格:
scanf(" %c", &c);
格式字符串中的空白告诉scanf跳过前导空格,并且将使用%c转换说明符读取第一个非空白字符。
或者只需在getchar();
scanf();
我发现的另一个错误:
在quier.near -1;
点击,你的初始值为=
?
在该声明中:if (quier -> near >- fi - 1)
,我认为您的意思是if (quier -> near > fi - 1)
。
#define fi 1000
应该是大写的。这是一个惯例,使阅读和理解代码更容易。它不是必需的,但建议使用。
在更改之后,我得到了我期望的输出:
A 5
B 6
..etc
另外,当您编写从用户那里获取一些数据的程序时,请务必检查并考虑如果您的输入不正确,您应该怎么做?您只是发送错误消息并关闭您的程序或用户应该再试一次?
我认为找出你的程序有什么问题就足够了。如果我在某个地方弄错了,请纠正我。