Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: While-loop ongelma

Sivun loppuun

kayttaja-10674 [10.03.2011 14:26:56]

#

Eli tällainen ongelma while-loopin kanssa:

while (fscanf(inp, "%d%d", &tunnus,&saldo) != EOF) {
			fprintf(inp, "%d\n", saldo);
			}

Ja tosiaan ongelma on siinä ettei tuo tulosta yhtikäs mitään...

jmp [10.03.2011 14:42:36]

#

Mitä sen pitäisi tulostaa ja minne? Miksi ylipäätään yrität tulostaa tekstiä samaan tiedostoon, josta yrität lukea?

Chiman [10.03.2011 14:43:41]

#

Entä tämä?

while (fscanf(inp, "%d%d", &tunnus, &saldo) != EOF) {
    printf("%d\n", saldo);
}

kayttaja-10674 [10.03.2011 14:47:57]

#

siis luen sitä toisesta tiedostosta, joka on tekstitiedosto eli siis tuo "inp" tuossa

Chiman, tuo while-looppi ei jostain syystä tunnista <EOF> päätettä, vaan tulostaa jatkuvalla syötöllä samaa tekstiä

groovyb [10.03.2011 16:02:20]

#

jotain tämäntapaista on immeiset käyttäneet:

#include <stdio.h>

int main(void)
{
        int x = 0, count = 0, posSum = 0, negSum = 0, negCount = 0, posCount = 0;
        float negAverage = 0, posAverage = 0;



        while(scanf("%d", &x) != EOF){
                if(x < 0){
                        negCount++;
                        negSum += x;
                }
                if(x >= 0){
                        posCount++;
                        posSum += x;
                }
        }

        posAverage = posSum / posCount;
        negAverage = negSum / negCount;

        printf("Positive average = %.2f\nNegative average = %.2f\n", posAverage, negAverage);

        return 0;
}

eq [10.03.2011 20:04:51]

#

kayttaja-10674 kirjoitti:

Eli tällainen ongelma while-loopin kanssa:

while (fscanf(inp, "%d%d", &tunnus,&saldo) != EOF) {
			fprintf(inp, "%d\n", saldo);
			}

Ja tosiaan ongelma on siinä ettei tuo tulosta yhtikäs mitään...

(edit: lisää mentaalinen yliviiva loppukappaleeseen, ts. hyppää sen yli. <s>) Pohdittavaa: esittääkö merkkijono "11" yhtä lukua (11) vai kenties kahta (1 ja 1)? Entä merkkijono "123123"? Miten *scanf-funktion pitäisi osata erottaa kaksi yhteen kirjoitettua lukua? (edit: </s>)

groovyb kirjoitti:

jotain tämäntapaista on immeiset käyttäneet:

Varmuuden vuoksi otetaan huomioon myös numerot, jotka ovat sekä negatiivisia että positiivisia :)? Ehkäpä else riittäisi...

Metabolix [10.03.2011 20:28:01]

#

eq, muistanet, että formaatti "%d%d" kelpuuttaa juurikin välilyönnillä eroteltuja lukuja eikä suinkaan yritä tehdä mitään tyhmyyksiä.

groovyb, esimerkkikoodissasi on klassinen aloittelijan moka: floatilla ei ole mitään virkaa, koska itse jakolasku tehdään kokonaisluvuilla.

eq [10.03.2011 20:54:03]

#

Metabolix kirjoitti:

eq, muistanet, että formaatti "%d%d" kelpuuttaa juurikin välilyönnillä eroteltuja lukuja eikä suinkaan yritä tehdä mitään tyhmyyksiä.

Ah, tässä kohtaa täytyy ottaa sanoja takaisin ja rehellisesti myöntää, että osa format-stringin tulkinnasta on vähäisen käytön myötä päässyt unohtumaan; tai sekoittumaan (lähinnä sen kanssa, että format stringissä olevalle yhdistelmälle whitespacea kelpaa mikä tahansa whitespace-määrä streamissa, ml. ei yhtään). Ylemmän viestin "huomio" on siis pitkälti turha. (Olisipa putkassa tuki yliviivaukselle...)

groovyb [10.03.2011 20:55:10]

#

Metabolix kirjoitti:

groovyb, esimerkkikoodissasi on klassinen aloittelijan moka: floatilla ei ole mitään virkaa, koska itse jakolasku tehdään kokonaisluvuilla.

En tarkemmin edes tutkinut, etsin vain toimivan pätkän googlella. En edes katsonut mitä Loopin jälkeen lukee :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta