• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Problem bei char Zuweisung für eine Zahl in c

  • Ersteller derfred
  • Erstellt am

derfred

Gast
hallo miteinander

ganz kurz: maschinenbaustudium, erstes semester, software engineering, c-Programmierung; alle nehmen visualstudio.net her, was ich zwar unter guestpc laufen lassen könnte, will mein ibook aber nicht mit windows zumüllen (der speicher wird eh schön langsam knapp) --> ich nehme xcode her

bisher hat alles ganz gut geklappt, doch jetzt habe ich das erste problem, welches mit gleichem quelltext unter windows nicht auftritt:
einfaches programm - seht selbst:


#include <stdio.h>

int main()
{
int iZahl= 0;
printf("\n\nBitte ganze Zahl eingeben:\t");
scanf(" %d",&iZahl);
printf("| ASCII | DEZ | HEX | OKT |\n");
printf("| %c | %d | %x | %o |\n",iZahl,iZahl,iZahl,iZahl);

return 0;
}



PROBLEM: bei zahlen zw 0 und 128 macht er eine ordentliche char zuweisung, ab 128-256 jedoch schreibt er mir nicht die großen buchstaben, sondern gibt mir lauter werte im stil: \201 aus

bitte helft mir - ich hatte zwar heute schon abnahme des programms, möchte es aber doch verstehen, was da anders läuft


ach ja, ein ähnliches problem habe ich im folgenden programm:


#include <stdio.h>

int main()
{
unsigned char cZeichen= 0;
printf("\n\nBitte beliebiges Zeichen eingeben:\t");
scanf(" %c",&cZeichen);
printf("| ASCII | DEZ | HEX | OKT |\n");
printf("| %c | %d | %x | %o |\n",cZeichen,cZeichen,cZeichen,cZeichen);

return 0;
}


da gibt er mir anstatt ein ö, oder ähnliches auch werte im stil \303 aus, trotz unsigned char.



danke für eure antworten, fred
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
Der Fehler liegt an Xcode. Schau dir deine compilierten Programme direkt im Terminal an, dann dürfte es gescheit funktionieren.

Die "Shell" in Xcode ist eher rudimentär und nicht zum testen von ernsthaften Kommandozeilenprogrammen geeignet.
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
ok, danke squart

und wie macht man das? ;)

OK, ich werde jetzt nicht genauer auf das Terminal eingehen, sondern nur eine Quick&Dirty Lösung dir anbieten. Falls du genaueres über eine Shell lernen willst, wirst du hier viele Threads finden, welche das navigieren und ausführen von Kommandozeilenprogrammen behandeln.

Wenn du dein Xcode-Projekt compiliert hast, findest du in deinem Projektordner den Unterordner build/Debug/ und dort eine Datei mit dem Namen deines Projektes. Nun klicke mit gedrückter CTRL-Taste (Rechtsklick) auf diese Datei, im Menü welches erscheint wählst du "Öffnen Mit"->"Terminal.app".
Alternativ öffnest du das Terminal (findest du unter "Dienstprogramme") und ziehst die Datei einfach darein. Danach musst du Enter drücken und dein Programm wird gestartet.

Hoffe, dass dir dies hilft, allerdings würde ich dir raten, dich etwas mehr mit dem Terminal auseinander zu setzen. Versuche einfach mal ein C-Programm nur mittels Terminal zu schreiben und zu compilieren (Einfacher Text-Editor in der Kommandozeile wäre "pico", zum compilieren einfach "gcc" verwenden). Sobald du dies geschafft hast, dürfte dir auch klar sein, wozu solche Programme wie du sie zur Zeit schreiben musst geeignet sind.

Viele Grüße
Squart
 

derfred

Gast
ich habe es jetzt im terminal laufen lassen --> resultat: gleiche fehler, jedoch werden sie nicht mehr als \132 oder so ausgegeben sondern als ¿ .
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
ich habe es jetzt im terminal laufen lassen --> resultat: gleiche fehler, jedoch werden sie nicht mehr als \132 oder so ausgegeben sondern als ¿ .

OK, ich denke mal, dass du nicht weißt, wie die ASCII-Tabelle aussieht. Teste mal folgendes Programm, um an eine ASCII-Tabelle zu kommen:
Code:
#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned int x, y;
	for (y = 2; y < 16; y++) {
		printf("%3.d - %3.d:  ", (y*16), (y+1)*16);
		for (x = 0; x < 16; x++) {
			printf(" %1.c |", (char)(x+16*y));
		}
		printf("\n");
	}
	return 0;
}