gpt4 book ai didi

C 程序在 while 循环后停止

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:57 25 4
gpt4 key购买 nike

我在学校的基本 C 练习中遇到了一些问题,我必须编写一个 C 程序来计算梯形网络的替换电阻。

这是我的代码(对不起荷兰语):

    /*laddernetwerk calculator*/
#include <stdio.h>
#include <math.h>
float R1, R2, Rinvoer;
int groep; //hierin wordt het nummer van de groep opgeslagen
char c; //hierin wordt de keuze van of er nog meer groepen zijn opgeslagen

int main(void){
printf("Een laddernetwerk bestaat uit merdere goepen weerstanden in serie (zie tekening).\n");
printf("Na elke verticale weesrand of weerstanden dient een lijn recht naar beneden getrokken te worden.\n");
printf("In dit programma moeten alle weerstanden uit een bepaalde groep ingevoerd worden.\n");
printf("Groep 1 bestaat in dit voorbeeld uit R1 en R2, groep 2 bestaat uit R3, R4 en R5.\n");
printf("Er kunnen met dit programma natuurlijk veel meer dan 2 groepen opgelost worden, de afbeelding is slechts een voorbeeld\n");
printf("\n");
printf(" groep 1 | groep 2 |\n");
printf(" ----------- | ------------ ----------- |\n");
printf("---------- R1 -----------|---- R3 ---- R4 ------------|---\n");
printf(" ----------- | | ------------ ----------- | |\n");
printf(" | | | | | |\n");
printf(" | R | | | R | | etc.\n");
printf(" | 2 | | | 5 | |\n");
printf(" | | | | | |\n");
printf(" | | | |\n");
printf("--------------------------------|-------------------------------------------|---\n");
printf(" | |\n");
printf("\n");
printf("Druk op enter om door te gaan met het programma");
while( getchar() != '\n' ); //wachten om door te gaan

printf("Geef 1 voor 1 de weerstanden van groep 1, druk op een letter als alle waarden ingevuld zijn\n");
R1=0;
while (scanf("%f", &Rinvoer) == 1)
R1 = Rinvoer + R1;
printf("Zijn er nog meer groepen weerstanden? type j voor ja, n voor nee\n");
printf("%.2f",R1);
/*--here the program stops--*/
scanf("%s", &c);
groep = 2;

if (c == 'j')
{
/*this part isn't finished yet*/
printf("Geef 1 voor 1 de weerstanden van groep %d, druk op een letter als alle waarden ingevuld zijn\n",groep);
while (scanf("%f", &Rinvoer) == 1)
R2 = Rinvoer + R2;

}

if (c == 'n'){
printf("De totale weerstand van dit laddernetwerk is %.2f Ohm",R1);
}

}

在 while 循环之后,它打印了 2 行,但随后程序停止了,它似乎禁用了 scanf。当我将 scanf 放在两个 printf 之间时,它们都被打印出来,但 scanf 仍然不起作用。我试过使用 do 循环,但没有成功。添加或删除花括号也没有任何效果。有人可以告诉我我做错了什么吗?

最佳答案

考虑对所有输入使用 fgets,并根据需要使用 sscanf 进行解析。

#include <stdio.h>
#include <math.h>
float R1, R2, Rinvoer;
int groep; //hierin wordt het nummer van de groep opgeslagen
char c[100]; //hierin wordt de keuze van of er nog meer groepen zijn opgeslagen

int main(void){
int result = 0;
printf("Een laddernetwerk bestaat uit merdere goepen weerstanden in serie (zie tekening).\n");
printf("Na elke verticale weesrand of weerstanden dient een lijn recht naar beneden getrokken te worden.\n");
printf("In dit programma moeten alle weerstanden uit een bepaalde groep ingevoerd worden.\n");
printf("Groep 1 bestaat in dit voorbeeld uit R1 en R2, groep 2 bestaat uit R3, R4 en R5.\n");
printf("Er kunnen met dit programma natuurlijk veel meer dan 2 groepen opgelost worden, de afbeelding is slechts een voorbeeld\n");
printf("\n");
printf(" groep 1 | groep 2 |\n");
printf(" ----------- | ------------ ----------- |\n");
printf("---------- R1 -----------|---- R3 ---- R4 ------------|---\n");
printf(" ----------- | | ------------ ----------- | |\n");
printf(" | | | | | |\n");
printf(" | R | | | R | | etc.\n");
printf(" | 2 | | | 5 | |\n");
printf(" | | | | | |\n");
printf(" | | | |\n");
printf("--------------------------------|-------------------------------------------|---\n");
printf(" | |\n");
printf("\n");
printf("Druk op enter om door te gaan met het programma");

fgets ( c, sizeof c, stdin);

printf("Geef 1 voor 1 de weerstanden van groep 1, druk op een letter als alle waarden ingevuld zijn\n");
R1=0;
//enter a blank line to exit loop
do {
if ( fgets ( c, sizeof c, stdin)) {
if ( c[0] != '\n' && 1 == ( result = sscanf( c, "%f", &Rinvoer))) {
R1 = Rinvoer + R1;
}
if ( result == 0) {
printf ( "enter a float or a blank line\n");
}
}
} while ( c[0] != '\n');
printf("Zijn er nog meer groepen weerstanden? type j voor ja, n voor nee\n");
printf("%.2f",R1);
/*--here the program stops--*/
fgets ( c, sizeof c, stdin);

groep = 2;

if (c[0] == 'j')
{
/*this part isn't finished yet*/
printf("Geef 1 voor 1 de weerstanden van groep %d, druk op een letter als alle waarden ingevuld zijn\n",groep);
//enter a blank line to exit loop
do {
if ( fgets ( c, sizeof c, stdin)) {
if ( c[0] != '\n' && 1 == ( result = sscanf( c, "%f", &Rinvoer))) {
R2 = Rinvoer + R2;
}
if ( result == 0) {
printf ( "enter a float or a blank line\n");
}
}
} while ( c[0] != '\n');

}

if (c[0] == 'n'){
printf("De totale weerstand van dit laddernetwerk is %.2f Ohm",R1);
}

}

关于C 程序在 while 循环后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46878195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com