Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Float Zahlen per Schleife in Array einlesen (ohne Pointer)?

Mitglied: Tobi_

Tobi_ (Level 1) - Jetzt verbinden

01.11.2007, aktualisiert 04.11.2007, 15475 Aufrufe, 3 Kommentare

Hallo,

ich möchte gern mehrere Gleitpunktzahlen in ein array einlesen. Mit der Eingabe einer leeren Zeile soll das Programm aus der Schleife springen.
Mein Ansatz funktioniert leider nicht wie gewollt, wenn ich die vorher eingegebenen Zahlen ausgebe wird nur die erste Zahl vollständig ausgegeben, bei den restlichen fehlt die 1. Zahl (z.B. 7.89 statt 67.89)...
Bin ziemlich ratlos!

mfg tobi



#include <stdlib.h>
#include <stdio.h>
#define MAX 10




int main()
{

float array[10]={0};
int i=0;
printf("\n\n\nGeben Sie eine Gleitpunktzahl ein:");
do
{
i++;
scanf("%f",&array[i]);
fflush(stdin); /*Entleeren des Tastaturpuffers*/

}
while (getchar()!='\n');

for(i=0;i<=10;i++)
{
printf("%f\n",array[i]);
}


system("PAUSE");
return 0;
}
Mitglied: Guenni
04.11.2007 um 08:23 Uhr
@_Tobi_

Hi,

#define MAX 10

... MAX taucht im Programm nicht auf

int i=0;

... im Programm schreibst du ...

do {
i++; zuerst wird i um 1 erhöht
scanf("%f",&array[i]);
dann wird ein Wert eingelesen
...

... das heißt:

- array[0] bleibt leer
- array[1] wird mit dem ersten Wert belegt.

Bei deiner Abbruchbedingung ...

while (getchar()!='\n');

… besteht die Gefahr, mehr als 10 Werte einzugeben, was über die Grenze
des Arrays hinausläuft.

Im Kopf der for-Schleife zählst du bis 10, was ebenfalls die Grenze des Arrays sprengt:

for(...; i<=10;...)

Wenn du bei 0 anfängst und bei 10 beendest, so sind das 11 Durchläufe.

for(i=0; i<10;i++) <-- hier wird von 0 bis 9 gezählt, ergibt 10 Durchläufe.


01.
#include "stdafx.h" 
02.
#include <stdio.h> 
03.
#include <conio.h> 
04.
 
05.
const int MAX=10; 
06.
 
07.
int _tmain(int argc, _TCHAR* argv[]){ 
08.
	 
09.
	float farray[MAX]; 
10.
	int i=0; 
11.
	while(i<MAX){ 
12.
		scanf("%f",&farray[i]); 
13.
		i++; 
14.
15.
	for(i=0;i<MAX;i++){ 
16.
		printf("%f\n",farray[i]); 
17.
18.
	getch(); 
19.
return 0; 
20.
}
Das Programm läuft mit MS Visual C++ 2005 Express Edition,
eventuell mußt du dann bei dir ein paar Änderungen vornehmen.

Gruß
Günni
Bitte warten ..
Mitglied: Biber
04.11.2007 um 17:41 Uhr
Moin _Tobi_,

noch zwei kleine Fussnoten zu Günnis Analyse:
...wird nur die erste Zahl vollständig ausgegeben, bei den restlichen fehlt die 1. Zahl...
Ist verständlich, da Du mit getchar() ja genau EIN Zeichen aus dem stdin-Stream entnimmst.
Da dieses Lesen eines Streams immer nur vorwärts geht, bist Du "an diesem Zeichen vorbei", wenn das nächste scanf() kommt.

In der Theorie könntest Du zwar ein Konstrukt basteln..
01.
int c; 
02.
.... 
03.
while(i<MAX){ 
04.
    scanf("%f",&farray[i++]); 
05.
    fflush(stdin); /*Entleeren des Tastaturpuffers*/ 
06.
    if ( (c==getchar()) =='\n') break; 
07.
    putchar(c); 
08.
}
[ungetestet]
... aber erstens sieht das Shice eher unschön aus,
zweitens ist eigentlich die Funktion fflush() für den Stream stdin gar nicht definiert (für stdout oder "echte" Files ja).

Grüße
Biber
Bitte warten ..
Mitglied: Tobi_
04.11.2007 um 22:34 Uhr
das einlesen habe ich nun auf die reihe bekommen! nur wie implementiere ich das abbruchkriterium?
kann man mit scanf auf die eingabe der ENTER Taste überprüfen?
Bitte warten ..
Ähnliche Inhalte
C und C++

String einlesen in Array und wieder ausgeben von hinten

Frage von ProtectedC und C++4 Kommentare

Hallo, ich würde gerne einen String einlesen bzw. char und dann andersrum wieder ausgeben. Also: Otto Maoam zu: maoaM ...

PHP

PHP und XML Float und Double

gelöst Frage von chrisenPHP2 Kommentare

Hallo zusammen, ich habe ein Problem mit der Erstellung von XML Dateien mit PHP: Und zwar gibt das erstellte ...

Batch & Shell

Batch Schleife als FOR-SCHLEIFE

gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Datenbanken

T-SQL Abfrage, Erstellen einer Sicht mit Parametern, die aus einer Schleife (array) stammen

gelöst Frage von AximandDatenbanken3 Kommentare

Hallo, ich ochse gerade an einem Problem rum. Ich habe in Excel eine Listbox. Aus dieser sollen Lagerplätze gewählt ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 5 StundenAusbildung8 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 2 TagenSpeicherkarten2 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 2 TagenSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 2 TagenHardware3 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Off Topic
SysAdmin im öffentlichen Dienst - jemand Erfahrungen?
Frage von JohnDorianOff Topic22 Kommentare

Hallo zusammen, hat jemand Erfahrung wie es so ist als SysAdmin im öffentlichen Dienst (Landkreis) im Südwesten der Republik ...

SAN, NAS, DAS
Nas mit USB und LAN gleichzeitig zugreifen
gelöst Frage von MarkBeakerSAN, NAS, DAS16 Kommentare

Hallo zusammen, ich suche eine Art NAS, womit ich via LAN und USB zugreifen kann. Folgender Aufbau ist gedacht: ...

DSL, VDSL
PPPOE Einwahl über Sophos UTM und FritzBox per PPPOE Passthrough
gelöst Frage von Leo-leDSL, VDSL16 Kommentare

Hallo zusammen, vielleicht habt Ihr noch eine Idee?? Ich besitze einen 1u1 Anschluss und möchte meine UTM ASG 110 ...

TK-Netze & Geräte
Low budget TK-Anlage für KMU
Frage von HeinklugTK-Netze & Geräte16 Kommentare

Hallo Admins, ich bin auf der Suche nach eine kostengünstigen Telefonanlage für mein kleines Büro mit 4-5 Mitarbeitern. Dabei ...