上下文:
作为类(class)项目的一部分,我创建了这个 code (原版)。效果很好,几乎满分。在学习新 Material 时,我挑战自己重写原始代码并实现其中的新内容。所以基本上是什么 this new version (与原来的差别不大 - 随意比较)确实是:
- 您输入字母 c/C 表示圆形,r/R 表示矩形,k/K 表示正方形,
- 输入愿望尺寸,
- 它相应地计算周长和表面,
- 作为用户,如果他想继续,
- 重复这个过程,
- 在用户决定停止时显示(按相同顺序)以下信息:
- 处理的数字总数,
- 更大的表面,
- 较小的圆周长,
- 长度>7.8的矩形总数,
- 处理过的方 block 总数,
- 经过处理的正方形边的平均长度。
注意在下面的执行中输入的 4 个字符中有 3 个是有效的。所以我们得到了它们的表面和周长。但是 'T' 是一个无效字符,但是当用户决定不继续时它仍然被算作总数字的一部分并给我 4 而不是 3:
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): c
Veuillez entrer le rayon: 10
Le perimetre est de: 62.83
La surface est de: 314.16
Voulez-vous continuer ? (o/n) o
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): t
Le caractere 'T' est invalide
Voulez-vous continuer ? (o/n) o
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): k
Veuillez entrer le cote du carre: 5
Le perimetre est de: 20.00
La surface est de: 25.00
Voulez-vous continuer ? (o/n) o
Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): r
Veuillez entrer la longeur et largeur du rectangle: 10 5
Le perimetre est de: 30.00
La surface est de: 50.00
Voulez-vous continuer ? (o/n) n
Au total, on a traite 4 figure(s)
La surface la plus grande est: 314.16
Il y a 1 rectangle(s) dont la longueur depasse 7.80 metres
Le plus petit perimetre des cercles est: 62.83
Le nombre total de carre traitees : 1
Le cote moyen des carres traites est de: 5.00
Process returned 0 (0x0) execution time : 47.514 s
Press any key to continue.
问题:
如何以仅计算用户输入的有效字符的方式调整增量 (somFigure++)?
源代码:
int main() {
char figure,
reponse;
int valide,
nbCarre = 0,
somFigure = 0,
nbGrRec = 0;
float perimetre,
surface,
rayon,
longueur,
largeur,
cote,
somCarre = 0.0,
plusGrandeSurface = 0.0,
plusPetitPerimetreC = 5000.0;
const float PI = 3.14159,
GRAND_RECTANGLE = 7.8;
do
{
printf("Entrez le caractere correspondant a la figure geometrique (c,C,r,R,k,K): ");
fflush(stdin);
figure = toupper(getchar());
valide = (figure == 'C') || (figure == 'R') || (figure == 'K');
somFigure++;
switch (figure) {
case 'C': printf("Veuillez entrer le rayon: ");
scanf("%f", &rayon);
perimetre = 2 * PI * rayon;
surface = PI * rayon * rayon;
if (surface > plusGrandeSurface)
plusGrandeSurface = surface;
if (perimetre < plusPetitPerimetreC)
plusPetitPerimetreC = perimetre;
break;
case 'R': printf("Veuillez entrer la longeur et largeur du rectangle: ");
scanf("%f%f", &longueur, &largeur);
perimetre = 2 * (longueur + largeur);
surface = longueur * largeur;
if (longueur > GRAND_RECTANGLE)
nbGrRec++;
if (surface > plusGrandeSurface)
plusGrandeSurface = surface;
break;
case 'K': printf("Veuillez entrer le cote du carre: ");
scanf("%f", &cote);
perimetre = 4 * cote;
surface = cote * cote;
nbCarre++;
somCarre += cote;
if (surface > plusGrandeSurface)
plusGrandeSurface = surface;
break;
default: printf("Le caractere '%c' est invalide\n", figure);
} /* Fin du Switch */
if (valide)
printf("Le perimetre est de: %.2f\n", perimetre),
printf("La surface est de: %.2f\n", surface);
printf("\nVoulez-vous continuer ? (o/n) ");
fflush(stdin);
reponse = getchar();
fflush(stdin);
}while(toupper(reponse) == 'O'); /* Fin de la boucle do....while */
printf("\nAu total, on a traite %d figure(s)\n", somFigure);
printf("La surface la plus grande est: %.2f\n", plusGrandeSurface);
if (nbGrRec > 0)
{
printf("Il y a %d rectangle(s) dont la longueur depasse %.2f metres\n", nbGrRec, GRAND_RECTANGLE);
}
else
printf("Il y a aucun rectangle traite\n");
if (plusPetitPerimetreC != 5000.0)
{
printf("Le plus petit perimetre des cercles est: %.2f\n", plusPetitPerimetreC);
}
else
printf("Il y a aucun cercle traite\n");
// Fait un resumer des nombre de carrés traités si l'utilisateur decise de ne plus continuer
if (nbCarre > 0)
{
printf("Le nombre total de carre traitees : %d\n", nbCarre);
printf("Le cote moyen des carres traites est de: %.2f\n", somCarre / nbCarre);
}
else
printf("Il y a aucun carre traite\n");
return 0;
}
最佳答案
你可以这样做:
if (valide) {
somFigure++;
printf("Le perimetre est de: %.2f\n", perimetre),
printf("La surface est de: %.2f\n", surface);
}
另请注意,没有大括号的原始代码可能无法按您预期的那样工作。只有 valide
为真时,第一个 printf
语句才会执行,但无论如何都会执行第二个语句。最好始终将花括号与 if
语句一起使用,以避免此类错误。
关于programming-languages - increment++ 是如何工作的以及如何调整它以排除无效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575310/