ganze Saätz in VAR speichern? [C/CPP]

Hi,

wir haben grad in Informatik mit C angefangen. Ich hab auch schon mein erstes Programm geschrieben, allerdings hätte ich noch eine Frage:

char ARTBEZ[80];
printf("Artikelbezeichnung: ");
scanf("%s",&ARTBEZ);

So sieht der Programmteil für die Eingabe der Artikelbezeichnung aus! Wenn ich jetzt aber z.B. "Monitor Miro" eingebe, nimmt er nur das Monitor auf!

Wie kann ich das jetzt schreibe, damit er die Eingabe komplett speichert?

cya und danke im voraus :]
 
versuch doch statt scanf mal cin!

Code:
#include <iostream>

...
char ARTBEZ[80];
printf("Artikelbezeichnung: ");
cin >> ARTBEZ;
...
 
chris:
in C Coders Beispiel ist es ohne .h richtig

C Coder:
Dein Code ist aber C++
Wenn er also wirklich C programmiert wird das nicht funktionieren.

edit:
allerdings muss es dann entweder
std::cin...
heißen oder es fehlt ein
using namespace std;
 
Hi,

wie funktioniert das denn? Jeder der schon mal in C programmiert hat, wird das Problem doch kennen und die Fortgeschrittenen wissen doch bestimmt auch eine Lösung...

cya
 
chris:
in C++ gibts die Standardbibliotheksheader einmal mit und einmal ohne Header.
Standardkonform sind die Header ohne Endung, in diesen sind alle Funktionen usw. im Namensraum std definiert

atomklo:
Ich hab mit C++ angefangen, kann es dir deshalb nicht genau sagen.
Allerdings hatte ich auch mit cin bereits das Problem, dass die Eingabe nur bis zum ersten Whitespace eingelesen wird.
Evtl kannst du irgendwo das Trennzeichen zum einlesen definieren, genauer kann ich dir da leider nicht helfen.
 
Du muss das ganze in eine schleife packen zb

#include <stdio.h>

int main()
{
char array[80];
int i = 0;
char c;

while( (c = getchar()) != EOF && c != '\n')
{
array = c;
i++;
}
/* zum abschluss noch null-terminieren*/
array = '\0';
puts(array);

return(0);
}


wobei es sinnvoller wäre wenn du das array dynamisch der tatsächlich genutzten grösse anpasst.
(alloc, malloc, calloc)

immer wieder die erst-gestellte Hürde wenn man C lernt :)

mfg Thomas

nachtrag:
Es gibt einige Formatierungsmöglichkeiten bei (f)scanf. Mit denen Du das Format der einzulesenden Zeichenkette beeinflussen kannst.

Z.B.:

#include <stdio.h>
'
int main()
{
char array[80];
int i = 0;
char c;
fscanf(stdin, "%[^\n]",array);
puts(array);

return(0);
}

Erklärung: Die Formatangabe [^LISTE] bedeutet für die Eingabe: Einlesen einer ZEichenkette BIS das ZEichen welches in LISTE steht vorkommt.

[^\n] gibt dann an : Lese solange BIS jemand <enter> drückt.
 
Moin,

Gulliver's Idee ist schon ganz gut, hat aber noch einen Nachteil, genau wie scanf. Wenn dir nämlich
das Array überläuft, es also mehr Zeichen kommen, als im Array überhaupt Platz haben. Scanf() kann dieses nämlich auch nicht abprüfen, muß man selber machen. Besser wäre:

Code:
# include <stdio.h>
# include <stdlib.h>

int main(int argc, char **argv)
{
   char array[32];
   int c;
   int z=0;

   for(;;){
      c=fgetc(stdin);
      if(c==EOF || c=='\n' || c=='\r') break; /* Raus, wenn einer Enter drückt oder die Eingabe zuende ist */
      if(z<(sizeof(array)-1)){                   /* Paßt überhaupt noch ein Byte rein? */
         array[z++]=c;
      }      
   }
   array[z]=0;
   printf("Eingabe war >%s<\n", array);
   return(0);
}

Hoffe, es ist syntaktisch richtig, habe es nicht compiliert ;)

Ferner mach dir keine Illusionen, daß du die Eingaben des Benutzers damit kontrollieren kannst. Die Zeichen werden erst dann an dein Programm übergeben, wenn er ENTER drückt. Du kannst damit also
nicht verhindern, daß er Mist eingibt, sondern nur nachträglich eine Fehlermeldung ausgeben!
 
@all
Mit "cin.getline(Variablenname,Größe);" werden auch ganze Sätze eingelesen.
Bei Fragen, Fragen! ;)

--------------------------------------------------------------------------------

#include <iostream.h>
#include <conio.h>

int main()
{
clrscr();
char text[20];
cin.getline(text,20);
cout << "\n" << text << endl;
getch();
return 0;
}

--------------------------------------------------------------------------------
 
aber das ist doch auch wieder Cpp oder?
funzt das mit dem cin.getline auch in C?
 
Tipp:
Versuchs mal mit gets(Satz);!!!
"Satz" ist hie die Variable(Array)!^^
falls es so nit klappt, nimm die #include<string.h>mit rein! :)
Ist alles für C, soweit ich weiß! ;)

mfg Shark85
 
Zurück
Oben