Jag har precis börjat med C++ och fick i skolan en uppgift om att skapa ett program som skriver ut de första 1000 primtalen. Det du söker kallas "flush", och jag vet bara hur man gör det, inte hur man bör göra det, så din lärare lär väl inte bli så glad om du gör just så här, för det är ju inte meningen att du ska kunna C...Rensa Variabel
Jag kan skriva ut så många primtal jag vill, nästan. För eftersom consolen har ett max antal rader så kan bara 300 visas åt gången.
Och, för att gå runt det kan man ju då visa 20 stycken i taget (en skärmdump utan att scrolla).
Problemet är att efter första gången man matat in ett värde på "in" (cin >> in;) så tror datorn att man redan matat in ett värde på varje in.. så fast det kommer upp nya indata med variabeln "in" (efter var 20:e rad med primtal) så 'matar datorn in datan' av sig självt då talet redan är inmatat.
Hur gör jag för att det skall fungera?
Snälla hjälp mig. (uppgiften skall vara inlämnad idag (04/10/02))
nedan finns HELA min källkod.
-----------------------------------------
/************************
* PRIMTAL
*
* Beskrivning:
* Skriver ut de 1000 första primtalen
*
* Upphovsman:
* Carl-Adam Brengesjö
*
* Information:
* Filnamn: primtal.cpp
* Skapad: 03/10/2002
* Plattform: PC
* OS: Windows 2000 Pro
* Språk: C++
* Kompilator: Microsoft Visual C++ 6.0
*
*
* Modifikationer:
* NAMN DATUM ÄNDRING
* ---------------------------------------------------------------
* 1 Carl-Adam Brengesjö 03/10/2002 Istället för primtalen mellan 0-1000, skrivs 1000 primtal ut.
* 2 Carl-Adam Brengesjö 03/10/2002 Consolen har max antal rader, kan därför inte se de första raderna (0-700). Begränsat antal primtal till 100 istället för 1000.
*
*
************************/
// inkludera headers
#include <iostream>
using namespace std;
// starta programmet
void main()
{
// variabeln tal talar om vilket tal det är vi kollar ifall det är ett primtal eller ej.
int tal = 1;
// den booleska variabeln primTal används för att tala om ifall det nuvarande talet är primtal eller ej.
bool primTal = true;
// variabeln j används för att räkna antalet rader utskrivna på varje sida.
int j = 1;
int in = 0;
// Loopar scriptet tills i är större än 1000. i ökar för varje tal som är primtal. (det skall skrivas ut 1000 primtal)
// ÄNDRING: se Modikfikation nr 1
// ÄNDRING: se Modikfikation nr 2
for (int i = 1;i<=100;)
{
// återställer primTal till sant varje gång loopen börjar om.
primTal = true;
// Loopar igenom alla talen (tal2) som talet (tal) kan divideras med.
for (int tal2=2;tal2<tal;tal2++)
{
// kollar ifall tal kan divideras med tal2 och få ut ett jämt resultat
if (tal % tal2 == 0)
{
// ifall tal är inte lika med tal2.. då är tal inte ett primtal
// *********************
// Jag vet att man skulle kunnat bädda in denna IF-sats i föregående IF-sats,
// fast av nån anledning, vilken jag inte kan förstå, så buggade det sig då.
// Så detta var jag tvungen till att göra. Vet inte om det är min kompilator
// eller ej, men det gick inte att lägga denna IF-sats i den föregående.
// *******************
if (tal != tal2)
{
primTal = false; // talet är ett falskt primtal... dvs, inget primtal
break; // avslutar for satsen (varför fortsätta? det är ju redan avgjort)
}
}
}
// ifall det är ett primtal...
if (primTal == true)
{
cout << i << ".\t" << tal << endl; // ... skriver ut talet
// ÄNDRING: se Modikfikation nr 1 & 3
i++; // ... och lägger till detta i räkningen (se första for-satsen)
j++;
}
// ÄNDRING: se Modikfikation nr 1
// för varje loop skall vi öka talet med ett... vi vill ju inte testa samma tal flera gånger, eller hur?
tal++;
// Fortsätter till nästa 'sida'
if (j == 20) {
j = 0; // återställer värdet till noll vid varje gång en sida är färdig.
cout << endl << "Mata in valfri data för att fortsätta: " << " " << j;
cin >> in;
in = 0;
cout << endl;
}
}
}Sv: Rensa Variabel
fflush(stdin);
Har för mig den ligger i stdlib.h.