简体   繁体   English

C程序在while循环后停止

[英]C program stops after a while loop

I've some issues with a basic C practice for school, I have to write a C program that calculates the replacement resistance of a ladder network. 我在学校的基本C练习方面遇到一些问题,我必须编写一个C程序来计算梯形网络的替代电阻。

This is my code (sorry for the dutch): 这是我的代码(对不起,荷兰人):

    /*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);
    }

}

After the while loop it prints the 2 lines, but then the program stops, it seems to disable the scanf. 在while循环之后,它打印了两行,但随后程序停止了,似乎禁用了scanf。 When I put the scanf between the both printf they both are printed, but the scanf still doesn't work. 当我将scanf放在两个printf之间时,它们都被打印了,但是scanf仍然不起作用。 I've tried using a do loop, but without success. 我尝试过使用do循环,但没有成功。 adding or removing curly braces also doesn't have any effect. 添加或删除花括号也没有任何作用。 Someone can tell me what I'm doing wrong? 有人可以告诉我我在做什么错?

Consider using fgets for all input and parse with sscanf as needed. 考虑将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);
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM