我尝试编写一个程序,按照患者姓名和紧急程度的顺序指示步骤顺序。但我不知道如何填写输入并再次打印输出。
这是输入输出的示例:
这是一个不完整的代码。
#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);
}
}
最佳答案
首先请注意 Aditi Rawat,这是 scanf
中的拼写错误,应该是 scanf("%c %d", &k, &v);
当您使用 scanf
时,您不应该忘记一件事,即缓冲区中的空白字符“\n”。当您在第一个 scanf
中获得输入以读取循环的值并按“Enter”按钮时,它会放入缓冲区“\n”字符,然后放入 for
循环中从 scanf
读取的第一个字符是“\n”。您应该清除输入缓冲区以获得正确的值。这里有一些例子:
编写一个函数来清除缓冲区并在每次 scanf
之后调用它:
void clear_buff(void)
{
while ((c = getchar()) != '\n' && c != EOF)
;
}
解决该问题的一种方法是在格式字符串中的转换说明符之前放置一个空格:
scanf(" %c", &c);
格式字符串中的空白告诉 scanf 跳过前导空格,并且将使用 %c 转换说明符读取第一个非空格字符。
或者在 scanf();
之后使用 getchar();
我发现的另一个错误:
Loot at quier.near -1;
你的初始化器 char =
在哪里?
在该声明中:if (quier -> close >- fi - 1)
,我认为您的意思是if (quier -> close > fi - 1)
。
并且#define fi 1000
应为大写。这是一种约定,使阅读和理解代码变得更容易。这不是必需的,但建议这样做。
更改后,我得到了我期望的输出:
A 5
B 6
..etc
此外,当您编写从用户那里获取一些数据的程序时,请务必检查它并思考如果您的输入不正确该怎么办?您只需发送错误消息并关闭程序,或者用户应该再试一次?
我认为找出你的程序出了什么问题就足够了。如果我在某些地方犯了错误,请纠正我。
关于c - 如何更改此程序以按患者姓名和紧急程度的顺序打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47241288/