我在学习 C 的同时编写代码,遇到了一个问题。 这是代码:
#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>
int main()
{
printf("%s", "Inserisci uno dei valori seguenti per il calcolo dell'area di:\n");
puts("1 - Cerchio\n");
puts("2 - Quadrato\n");
puts("3 - Sfera\n");
int n;
float x;
float A;
while (n != EOF)
{
switch (n = getchar())
{
case '1':
puts("Inserisci il raggio del cerchio: ");
scanf("%f", &x);
A = (float)M_PI*x*x;
printf("L'area del cerchio e': \n%f", A);
break;
case '2':
puts("Inserisci il lato del quadrato: ");
scanf(" %f", &x);
A = x*x;
printf("L'area del quadrato e': \n%f", A);
break;
case '3':
puts("Inserisci il raggio della sfera: ");
scanf(" %f", &x);
A = (float)M_PI*x*x*4;
printf("L'area della sfera e': \n%f", A);
break;
case '\n': //ignora i newline
case '\t': //ignora le tabulazioni
case ' ': //ignora gli spazi in input
break;
default:
puts("Non e' stato inserito un valore valido\n");
if (n = EOF)
{
puts("Inserito valore per la terminazione del programma. (CTRL+Z)");
}
}
puts("\nInserire un altro valore per l'area");
}
}
输出:
Inserisci uno dei valori seguenti per il calcolo dell'area di:
1 - Cerchio
2 - Quadrato
3 - Sfera
1
Inserisci il raggio del cerchio:
1
L'area del cerchio e':
3.141593
Inserire un altro valore per l'area
Inserire un altro valore per l'area
问题是它打印了 while 循环最后一个字符串的两次。 我试图在 case 指令结束后打印字符串“Inserire un altro valore”。 我该如何解决这个问题?我认为这可能是一个逻辑错误,而不是语法错误。不知道,还在学习中
因为您执行了
puts("\nInserire un altro valore per l'area");
,所以它会在每次迭代结束时执行。是否有效。另外,默认情况下已经包含类似的消息,当输入无效时,这将重复。
我会这样做:将 p
uts("\nInserire un altro valore per l'area");
移动到有效的 case 块内,并将其从默认行为中删除。
while (n != EOF)
{
switch (n = getchar())
{
case '1':
puts("Inserisci il raggio del cerchio: ");
scanf("%f", &x);
A = (float)M_PI * x * x;
printf("L'area del cerchio e': \n%f", A);
puts("\nInserire un altro valore per l'area");
break;
case '2':
puts("Inserisci il lato del quadrato: ");
scanf(" %f", &x);
A = x * x;
printf("L'area del quadrato e': \n%f", A);
puts("\nInserire un altro valore per l'area");
break;
case '3':
puts("Inserisci il raggio della sfera: ");
scanf(" %f", &x);
A = (float)M_PI * x * x * 4;
printf("L'area della sfera e': \n%f", A);
puts("\nInserire un altro valore per l'area");
break;
case '\n': //ignora i newline
case '\t': //ignora le tabulazioni
case ' ': //ignora gli spazi in input
break;
default:
puts("Non e' stato inserito un valore valido\n");
if (n == EOF)
{
puts("Inserito valore per la terminazione del programma. (CTRL+Z)");
}
}
}