gpt4 book ai didi

c - 我的代码比我想要的多循环一次,我怀疑我的 getchar 语句有问题

转载 作者:行者123 更新时间:2023-12-04 06:20:11 26 4
gpt4 key购买 nike

首先,我要提前感谢在座的各位。我非常期待在计算机科学领域取得进步,并在我变得更加精通时帮助他人。

现在这是我的代码:

#include <stdio.h>
#include <stdlib.h>

#define RECORDS 30

/*Questions
Formatting display() - can we use spaces to format?
Is the patient structure supposed to be global or local in enter()?
*/

void enter();
void display();
void update();
void loadDisk();
void writeDisk();
void emptyDisk();
void sort();
void clear();

struct patient
{
char * name;
int age;
double highBP, lowBP, riskFactor;
};

struct patient * db[RECORDS];
int counter = 0;

main()
{
int flag = 1;

while (flag == 1)
{
printf("---------------------------------------------------------\n");
printf("|\t(N)ew record\t(D)isplay db\t(U)pdate record |\n");
printf("|\t(L)oad disk\t(W)rite disk\t(E)mpty disk |\n");
printf("|\t(S)ort db\t(C)lear db\t(Q)uit |\n");
printf("---------------------------------------------------------\n");
printf("choose one: ");

char selection = getchar();

printf("selection %c\n", selection);

if ((selection == 'n') || (selection == 'N'))
{
//New record
enter();
}

else if ((selection == 'd') || (selection == 'D'))
{
//Display db
//printf("display %d\n", flag);
display();
}

else if ((selection == 'u') || (selection == 'U'))
{
//Update db
update();
}

else if ((selection == 'l') || (selection == 'L'))
{
//Load disk
loadDisk();
}

else if ((selection == 'w') || (selection == 'W'))
{
//Write disk
writeDisk();
}

else if ((selection == 'e') || (selection == 'E'))
{
//Empty disk
emptyDisk();
}

else if ((selection == 's') || (selection == 'S'))
{
//Sort db
sort();
}

else if ((selection == 'c') || (selection == 'C'))
{
//Clear db
clear();
}

else if ((selection == 'q') || (selection == 'Q'))
{
//Quit
flag = 0;
}

else
{
printf("not a vaild input\n");
}
}
}

void enter()
{
/*struct patient temp;

printf("name: "); sscanf("%s", temp.name);
printf("age: "); scanf("%d", temp.age);
printf("high bp: "); scanf("%f", temp.highBP);
printf("low bp: "); scanf("%f", temp.lowBP);

db[counter] = (struct patient *) calloc(1, sizeof(temp));
*db[counter] = temp;

//printf("%s, %d, %f, %f", db[counter]->name, db[counter]->age, db[counter]->highBP, db[counter]->lowBP);
counter++;*/
}

void display()
{

}

void update()
{

}

void loadDisk()
{

}

void writeDisk()
{

}
void emptyDisk()
{

}

void sort()
{

}

void clear()
{

}

我在运行它时遇到的问题是,在我输入一个选项后菜单会显示两次。我无法理解出了什么问题,但我怀疑它与存储选择和换行符的 getchar 有关,因此运行它两次。这也意味着最终的 else 语句将运行,它确实如此。

我想我已经对问题进行了三角测量,只是不确定如何解决它。先感谢您!

最佳答案

如果问题出在 getchar(看起来确实如此),为什么不使用不同的函数呢?

尝试更换:

char selection = getchar();

有了这个:
char selection;
scanf("%c",&selection);

如果您担心单个字符溢出,则对字符串执行 scanf() 并仅使用检查中的第一个字符:
char selection, selectionstr[20];
scanf("%s",selectionstr);
selection = selectionstr[0];

关于c - 我的代码比我想要的多循环一次,我怀疑我的 getchar 语句有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6683873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com