我正在嘗試學習 c 語言,我必須創建一個計算器,問題是,如果我不輸入任何內容,只需按 enter 鍵,它就會列印出錯誤,我曾嘗試使用 scanf 來做,但它不起作用。
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a,b,c;
char op;
int q=1;
while(q=1){
scanf("%f%c%f",&a,&op,&b);
if (scanf("%f%c%f",&a,&op,&b)=='\n')
{
printf("error");
}
switch (op)
{
case ' ':c=a b;
break;
case '-':c=a-b;
break;
case'*':c=a*b;
break;
case'/':c=a/b;
break;
default:printf("error");
q=2;
break;
}
{printf("%f\n",c);}
}}
uj5u.com熱心網友回復:
嘗試使用 scanset 掃描換行符%1[\n]。
另一個掃描集%*[^\n]將掃描并丟棄所有不是換行符的內容。
另一種方法是使用fgets讀取一行,然后用sscanf.
#include <stdio.h>
#include <stdlib.h>
int main ( void) {
char newline[2] = "";
char op = 0;
int scanned = 0;
double a = 0.0;
double b = 0.0;
double c = 0.0;
while ( 1) {
printf ( "input a number, an operator and a number\n");
printf ( " or just enter to quit\n");
if ( 1 == scanf ( "%1[\n]", newline)) { // try to scan a newline
printf ( "done\n");
break;
}
if ( 3 != ( scanned = scanf("%lf %c%lf", &a, &op, &b))) {
printf ( "bad input error\n");
printf ( "try again\n");
}
if ( EOF == scanned) {
printf ( "EOF error\n");
break;
}
scanf ( "%*[^\n]"); // scan and discard up to newline
scanf ( "%1[\n]", newline); // scan a newline
if ( 3 == scanned) {
switch (op) {
case ' ':
c = a b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
case '/':
c = a / b;
break;
default:
printf ( "bad op error\n");
printf ( "try again\n");
op = 0;
break;
}
if ( op) {
printf ( "%f\n", c);
}
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/524594.html
標籤:C扫描新队
