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...
Mitä sen pitäisi tulostaa ja minne? Miksi ylipäätään yrität tulostaa tekstiä samaan tiedostoon, josta yrität lukea?
Entä tämä?
while (fscanf(inp, "%d%d", &tunnus, &saldo) != EOF) { printf("%d\n", saldo); }
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ä
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; }
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...
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.
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...)
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 :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.