C语言 我应该在scanf()中同时包含fflush(stdin)和一个空格,还是只有一个就足够了?



我的计算器应用程序在用户输入数字后无法正常工作。所以我在scanf((中添加了fflush(stdin(和%d后面的空格。我的问题是我应该只包含 fflush(stdin( 和 %c 后面的空格,还是只有一个选项就足够了?我正在使用Macbook,所以我担心如果我省略一个,它将无法在其他操作系统上运行。

#include <stdio.h> 
#include <stdlib.h> 
//PROTOTYPE
int operationSwitch(); //Function to calculate total of operand1 and operand2.
int menu(); //Function for main menu.
int iResume(); //Function to continue the program or not.

char  iOperation    = ''; //choices (1-7)
float operand1      = 0; //number 1
float operand2      = 0; //number 2
float operandTotal  = 0; //total
int   testPrime, counter, prime = 0; 
char cContinue   = ''; 
char symbol      = ''; 

int main(){
menu();
return 0;
}

int menu (){
do {
printf("nPlease choose an operation: ");
printf("n(1) Additionn ");
printf("n(2) Subtractionn ");
printf("n(3) Multiplicationn ");
printf("n(4) Divisionn ");
printf("n(5) Modulus (integers only)n ");
printf("n(6) Test if Prime (integers only)n ");
printf("n(7) Exitn ");
printf("nChoose (1-7):t");
fflush(stdin);
scanf(" %c", &iOperation);
} while (iOperation < 49 || iOperation > 55 );

if (iOperation != 54 && iOperation != 55){ //ASCII 55 == 7)
printf("nEnter number 1:t");
fflush(stdin);
scanf(" %f", &operand1);
printf("nEnter number 2:t");
fflush(stdin);
scanf(" %f", &operand2);
}
operationSwitch();
/*** RESULTS ***/
if ( symbol == '/' && operand2 == 0) {
printf("nt-----| Answer: %.2f / %.2f = Undefined |-----n", operand1,operand2);
} else if (iOperation != 54) {
printf("nt-----| Answer: %.2f %c %.2f = %.2f |-----n", operand1, symbol, operand2, operandTotal);
}

iResume();
return 0;
} //End Menu
/*********************************
SWITCH FUNCTION
*********************************/
int operationSwitch() {
switch (iOperation) {
case 49://1 Addition Ascii 49 == 1 43 == +
operandTotal = operand1 + operand2;
symbol = '+';
break;
case 50: //2 Substraction
operandTotal = operand1 - operand2;
symbol = '-';
break;
case 51: //3 Multiplication
operandTotal = operand1 * operand2;
symbol = '*';
break;
case 52: //4 Division
operandTotal = operand1 / operand2;
symbol = '/';
break;
case 53: //5 Modulus
operandTotal = (int)operand1 % (int)operand2;
symbol = '%';
break;
case 54: //6
prime = 1;
printf("nEnter number to be tested for prime: ");
fflush(stdin);
scanf(" %d", &testPrime);
for(counter = 2; counter <= (testPrime/2); counter++ )
{
if(testPrime % counter == 0)
{
prime = 0;
break;
}
}
if (prime == 1) {
printf("nt| %d is a prime number. |n", testPrime);
}
else {
printf("nt| %d is not a prime number. |n", testPrime);
printf("nt| %d * %d = %d n", testPrime/counter, counter , testPrime);
}
break;
case 55:
printf("nGood Byen");
exit(0);
break;
default:
printf("nYou entered: %c - Please try again ", iOperation );
break;
} //End Switch iOperation
return 0;
} //End Switch Function
/*********************************
RESUME FUNCTION
*********************************/
int iResume() {
printf("nWould you like to try again?nPress 'Y' to go to menu,nor any key to quit?t");
fflush(stdin);
scanf(" %c", &cContinue);
if (cContinue == 'y' || cContinue == 'Y'){
menu();
} else {
printf("Good Bye!n" );
}
return 0;
}

fflush(stdin)是不可抗拒的行为。

int fflush(FILE *ostream(;

ostream 指向未输入最新操作的输出流或更新流,fflush 函数导致 要传送到主机的该流的任何未写入数据 要写入文件的环境;否则,行为为 定义。

最新更新