#include<stdio.h>
void clearKeyboard(void){
while(getchar()!='\n');
}
void pause(void){
printf("Press <ENTER> to continue...");
clearKeyboard();
}
void printWelcome(void){
printf ("---=== Grocery Inventory System ===---\n\n");
}
int getInt(void){
int iVal;
char charCheck='x';
while (charCheck != '\n'){
scanf ("%d%c",&iVal,&charCheck);
if (charCheck != '\n'){
clearKeyboard();
printf ("Invalid integer, please try again: ");
}
}
return iVal;
}
int getYesOrNo(void){
//list of variables declared and initialized
char ch;
int ret;
ch = 0;
ret = 0;
//it will keep asking the user as long as they don't reply with y or n
while(ch != 'Y' || ch != 'y' || ch != 'N' || ch != 'n')
{
scanf(" %c", &ch);
clearKeyboard();
if (ch == 'Y' || ch == 'y'){
ret = 1;
return ret;
}
else if (ch == 'N' || ch == 'n'){
ret = 0;
return ret;
}
//if they type other than y or n, it will print out this message
else{
printf("Only (Y)es or (N)o are acceptable: ");
}
}
return ret;
}
int getIntLimited(int lowerLimit, int upperLimit){
int iVal;
do{
iVal = getInt();
if (!(iVal >= lowerLimit && iVal <= upperLimit))
printf ("Invalid value, 0 <= value <= 7: ");
}while (!(iVal >= lowerLimit && iVal <=upperLimit));
return iVal;
}
int getMenuChoice(void){
int SEL;
int temp;
printf("1- List all items\n");
printf("2- Search by SKU\n");
printf("3- Checkout an item\n");
printf("4- Stock an item\n");
printf("5- Add new item or update item\n");
printf("6- delete item\n");
printf("7- Search by name\n");
printf("0- Exit program\n> ");
scanf("%d", &SEL);
if (SEL > 7){
temp = getIntLimited(0,7);
}
return SEL;
}
void GrocInvSys(void){
int SEL;
int DONE = 0;
SEL = 0;
printWelcome();
while (DONE == 0){
SEL = getMenuChoice();
clearKeyboard();
if (SEL == 1){
printf("List Items!\n");
pause();
}
if (SEL == 2){
printf("Search Items!\n");
pause();
}
if (SEL == 3){
printf("Checkout Item!\n");
pause();
}
if (SEL == 4){
printf("Stock Item!\n");
pause();
}
if (SEL == 5){
printf("Add/Update Item!\n");
pause();
}
if (SEL == 6){
printf("Delete Item!\n");
pause();
}
if (SEL == 7){
printf("Search by name!\n");
pause();
}
if(SEL == 0){
printf("Exit the program? (Y)es/(N)o): ");
DONE = getYesOrNo();
}
}
}
int main(void){
GrocInvSys();
return 0;
}
このコードでは、getMenuChoice内のすべてのアイテムが表示され、使用するたびに各アイテムの番号が入力されると、特別なメッセージが出力されます。ファンクションコールが関数内で機能しない
すべてがしかし、それは言うべきで、正常に動作している「無効な値が、0 <値< 7:」Iは0または1または2または3または4または5または6または7
以外のものを入力したときにだから、私はgetIntlimited関数がgetMenuChoice関数で動作していないと推測しています。なぜでしょうか?
p.s.私はpause()をタイプしました。 SEL ==ステートメントの場合はすべて、それを改善できる方法はありますか?
'while '条件全体が' || 'ではなく' && 'によって連鎖されるべきです。つまり、それはかなり役に立たない。文字は同時に2つの値になることはできません。そのため、等しくない条件の1つは常に真です。 'while(1)'とすることもできますし、それが意図であれば、それを実行してください。 – WhozCraig
あなたの 'getInt'関数は不気味です。 –
'clearKeyboard()'もEOFを考慮する必要があることに注意してください。 'int ch; while((ch = getchar())!= EOF && ch!= '\ n'); '。また、 'scanf()'の戻り値をチェックする必要があります。それが2でなければ、あなたは問題を抱えています。あなたが数字と別のキャラクターの両方を持っていることが分かっている場合に限り、余分が改行であることを確認する必要があります。 –