|
You last visited: Today at 03:55
Advertisement
Objective C - Countdown
Discussion on Objective C - Countdown within the C/C++ forum part of the Coders Den category.
09/11/2014, 12:49
|
#1
|
elite*gold: 3
Join Date: Dec 2010
Posts: 1,321
Received Thanks: 243
|
Objective C - Countdown
Hallo zusammen,
habe vor 2 Tagen angefangen Objective-C zu lernen. Habe mir ein dickes Buch mit 1800 Seiten gekauft und schaue mir viele Videos an um mich in die Materie zu arbeiten.
Heute bzw. gerade hab ich meine erste eigene Sache allein geschrieben. Einen Countdown der in der Konsole ausgegeben wird (also in der Konsole von XCode). Ich hätte gerne das ein "Profi" mal drüber schaut und sagt ich was verbessern könnte oder ob ein formeller Fehler besteht. Wenn ich es lerne, dann schon richtig.
Dient natürlich auch als Vorlage für jemanden der es braucht
Eine Frage hätte ich auch: Ich weiß zwar dass ich hier void benutzen muss um die Funktion zu erstellen aber so richtig verstanden habe ich es noch nicht. Ich weiß das void nichts zurück gibt. Aber kann mir das jemand nochmal genauer erkläre wann ich void benutzte und welche alternativen es zu void gibt?
Hier der Code:
Code:
#import <Foundation/Foundation.h>
#import <stdlib.h>
int main()
{
int x;
for (x = 10; x >= 2; x--) {
sleep(1);
NSLog(@"%d Sekunden",x);
}
for (x = 1; x >= 1; x--) {
sleep(1);
NSLog(@"%d Sekunde",x);
if (x == 1) {
NSLog(@"Bumm!");
}
}
}
|
|
|
09/11/2014, 13:08
|
#2
|
elite*gold: 0
Join Date: Apr 2010
Posts: 2,832
Received Thanks: 4,152
|
Abgesehen davon dass sleep() in ms und nicht s ist und die variable zahl nicht definiert ist:
Code:
void countdown(unsigned int zahl)
{
for(unsigned int i = zahl; i > 0; i--)
{
printf("Es dauert noch %d Sekunden\n", i);
sleep(1000);
}
printf("Fertig\n!");
}
Würde mich hüten die Funktion aus der Funktion nochmals aufzurufen.
|
|
|
09/11/2014, 14:17
|
#3
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
Das ist C, kein Objective-C. Da Objective-C direkt auf C aufbaut, ist das allerdings nicht so schlimm und der Objective-C Part kommt garantiert noch in deinem Buch vor.
Wichtig wäre, dass du verstehst, dass du dort eine Funktion rekursiv aufrufst und dass du dann unbedingt eine Abbruchbedingung hast.
Rückgabetypen können alle Datentypen, wie z.B. int, double, NSString oder auch selbst erstellte Klassen sein, aber eben auch void, das, wie von dir bereits bemerkt, nichts zurückgibt.
Quote:
|
PS: gehört Obj-C in dieses Forum?
|
Ja
|
|
|
09/12/2014, 17:16
|
#4
|
elite*gold: 3
Join Date: Dec 2010
Posts: 1,321
Received Thanks: 243
|
Hast recht snow. Hab mal mit meinen Kenntnissen einen Code in Objective-C geschrieben und den Code oben umgeändert.
lg
|
|
|
09/12/2014, 17:34
|
#5
|
elite*gold: 74
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
|
Code:
#import <Foundation/Foundation.h>
#import <stdlib.h>
int main()
{
int x;
for (x = 10; x >= 2; x--) {
sleep(1);
NSLog(@"%d Sekunden",x);
}
for (x = 1; x >= 1; x--) {
sleep(1);
NSLog(@"%d Sekunde",x);
if (x == 1) {
NSLog(@"Bumm!");
}
}
}
Du wartest immer noch Millisekunden ab, 1000 MS sind eine Sekunde, entsprechend wartet sleep(1000) eine Sekunde, das ist wohl eher, was du haben möchtest.
Dann solltest du vielleicht mal erklären, was du mit deinen For-Schleifen erreichen möchtest, funktionieren tut das nämlich nicht sinnvoll.
PS: Ordentliche Klammersetzung und sinnvolle Einrückung sind das A und O in jeder Programmiersprache.
|
|
|
09/12/2014, 18:08
|
#6
|
elite*gold: 0
Join Date: Nov 2013
Posts: 23
Received Thanks: 1
|
Alternativ kannst du auch usleep() benutzen. Da kannst du dann soweit ich weiß die Zeit in Sekunden angeben. Weitere Informationen kanns du dir unter "man 3 usleep" ansehen. Einfach mal in die Konsolo tippen
|
|
|
09/14/2014, 15:14
|
#7
|
elite*gold: 3
Join Date: Dec 2010
Posts: 1,321
Received Thanks: 243
|
Also mit der ersten for Funktion soll er die restlichen Sekunde n angeben also 10 - 2. und mit der zweiten for Funktion soll er wenn die letzte Sekund e halt als Sekund e ausgeben und nicht Sekunde n.
Quote:
Du wartest immer noch Millisekunden ab, 1000 MS sind eine Sekunde, entsprechend wartet sleep(1000) eine Sekunde, das ist wohl eher, was du haben möchtest.
Dann solltest du vielleicht mal erklären, was du mit deinen For-Schleifen erreichen möchtest, funktionieren tut das nämlich nicht sinnvoll.
PS: Ordentliche Klammersetzung und sinnvolle Einrückung sind das A und O in jeder Programmiersprache.
|
Sag mir lieber wie ich es besser machen könnte anstatt mich anzufahren, ich bin ja noch am lernen also geh nicht davon aus dass ich das alles perfekt schreiben kann. Immer die Subjektivität beachten...
g
|
|
|
09/14/2014, 17:27
|
#8
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
Quote:
Originally Posted by Evese
Also mit der ersten for Funktion soll er die restlichen Sekunden angeben also 10 - 2. und mit der zweiten for Funktion soll er wenn die letzte Sekunde halt als Sekunde ausgeben und nicht Sekunden.
Sag mir lieber wie ich es besser machen könnte anstatt mich anzufahren, ich bin ja noch am lernen also geh nicht davon aus dass ich das alles perfekt schreiben kann. Immer die Subjektivität beachten...
|
Man kann unnötige schleifen in schleifen vermeiden. man schreibt meistens einfach sekunde(n)
die { } klammern setze ich immer so wie bei Elektrochemie's post. ist aber egal wie man es macht.
int x würde ich in der for schleife deklarieren und als byte. es steht immerhin fest das der wert zwischen 0 und 10 ist.
sleep() sollte wahrscheinlich ms verlangen. 1 sek = 1000 ms.
|
|
|
09/15/2014, 10:17
|
#9
|
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
|
Quote:
Originally Posted by Evese
Also mit der ersten for Funktion soll er die restlichen Sekunden angeben also 10 - 2. und mit der zweiten for Funktion soll er wenn die letzte Sekunde halt als Sekunde ausgeben und nicht Sekunden.
Sag mir lieber wie ich es besser machen könnte anstatt mich anzufahren, ich bin ja noch am lernen also geh nicht davon aus dass ich das alles perfekt schreiben kann. Immer die Subjektivität beachten...
g
|
Er fährt dich nicht an, er fragt lediglich was du denkst das deine For-schleife macht weil sie wird nichts machen. x=1 solange x <= 1 mach schleife und zähle 1 runter. Was denkst du wie oft die for-schleife ausgeführt wird? Er kann dir gar nicht sagen wie du es richtig machen müsstest weil er nicht weis was du mit der schleife machen möchtest (bin mir ziemlich sicher, dass du nicht das machen willst, dass du da programmiert hast.
|
|
|
09/15/2014, 21:03
|
#10
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
Quote:
Originally Posted by ƬheGame
....
|
er weis genau was er machen will. les nochmal seinen source. die frage was die for schleife bringt war sinnlos da es im quelltext steht
|
|
|
09/15/2014, 21:40
|
#11
|
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
|
Quote:
Originally Posted by »FlutterShy™
er weis genau was er machen will. les nochmal seinen source. die frage was die for schleife bringt war sinnlos da es im quelltext steht
|
Die For schleife wird in keinem möglichen Szenario auch nur 1 mal ausgeführt so wie es da steht ^^ X = 1 solange X <= 1 (was es nicht ist das er x eine eins zugewiesen hat) mache forschleife und zähle x eins runter.
|
|
|
09/15/2014, 21:46
|
#12
|
elite*gold: 74
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
|
Wieso?
x ist doch ein mal >= 1, dann wird sein Code ausgeführt und anschließend x dekrementiert, womit die Bedienung nicht mehr erfüllt ist.
PS: @TE: Ich habe dich doch nicht angefahren, ich wollte dich bloß dazu bewegen, dass du dir noch einmal vor Augen führst, was deine Schleifen machen. Ich hatte eigentlich erwartet, dass du dann auf den Irrsinn deiner Schleife stößt, denn für eine Operation, die nur ein einziges mal ausgeführt wird, brauchst du sie nicht.
Zähle einfach mittels einer For-Schleife von 10 bis 2 runter, und den restlichen Code führst du direkt aus.
Also so:
Code:
#import <Foundation/Foundation.h>
#import <stdlib.h>
int main()
{
for (int x = 10; x >= 2; x--) {
sleep(1000);
NSLog(@"%d Sekunden",x);
}
sleep(1000);
NSLog(@"1 Sekunde");
sleep(1000);
NSLog(@"Bumm!");
}
So zählst du von 10 bis 2, dann wartest du eine Sekunde, gibst 1 aus, wartest erneut eine Sekunde und gibst Bumm! aus. So kannst du dir eine Schleife und die (unsinnige) If-Abfrage sparen. Und weil du dein x jetzt nur noch ein mal brauchst, kannst du es direkt in die Schleife ziehen und sparst noch mal eine Zeile Code
|
|
|
09/15/2014, 21:56
|
#13
|
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
|
Quote:
Originally Posted by .StarSplash
Wieso?
x ist doch ein mal >= 1, dann wird sein Code ausgeführt und anschließend x dekrementiert, womit die Bedienung nicht mehr erfüllt ist.
PS: @TE: Ich habe dich doch nicht angefahren, ich wollte dich bloß dazu bewegen, dass du dir noch einmal vor Augen führst, was deine Schleifen machen. Ich hatte eigentlich erwartet, dass du dann auf den Irrsinn deiner Schleife stößt, denn für eine Operation, die nur ein einziges mal ausgeführt wird, brauchst du sie nicht.
Zähle einfach mittels einer For-Schleife von 10 bis 2 runter, und den restlichen Code führst du direkt aus.
Also so:
Code:
#import <Foundation/Foundation.h>
#import <stdlib.h>
int main()
{
int x;
for (x = 10; x >= 2; x--) {
sleep(1000);
NSLog(@"%d Sekunden",x);
}
sleep(1000);
NSLog(@"1 Sekunde");
sleep(1000);
NSLog(@"Bumm!");
}
So zählst du von 10 bis 2, dann wartest du eine Sekunde, gibst 1 aus, wartest erneut eine Sekunde und gibst Bumm! aus. So kannst du dir eine Schleife und die (unsinnige) If-Abfrage sparen.
|
Wieso habe ich ein < gelesen wenn da ein > steht?
|
|
|
09/15/2014, 21:57
|
#14
|
elite*gold: 74
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
|
Weil du ganz offensichtlich <>-blind bist
|
|
|
09/16/2014, 18:50
|
#15
|
elite*gold: 3
Join Date: Dec 2010
Posts: 1,321
Received Thanks: 243
|
Okay danke jedenfalls für die Hilfe
|
|
|
 |
|
Similar Threads
|
Objective C - Wo Anfangen?
02/04/2014 - General Coding - 2 Replies
//
|
Objective C WebSocket <-----
01/27/2014 - C/C++ - 2 Replies
Hi suche jemanden der mir zeigen kann wie man WebSockets in Objective C einbaut und sich so infos von anderen Seiten oder Datenbanken holt zB Spielstand von einem Bundesliga Spiel oder sonst i.was wenn ihr es gut macht gibt es auch ein kleines Taschengeld.
MfG :)
|
Mal ein wenig Objective-C
11/17/2013 - Coding Snippets - 0 Replies
Mal ein wenig Objective-C, alle Samples benötigen zwingend das ASIHTTPRequest-Framework.
elitepvpers.com Login:
- (void)loginWithUsername:(NSString *)username Password:(NSString *)password
{
NSString *loginURL = @"http://www.elitepvpers.com/forum/login.php? do=login";
NSString *requestBodyString = ;
NSURL *url = ;
|
Suche Objective-C(++) Developer.
07/13/2011 - General Coding - 0 Replies
Hallo!
Ich habe folgendes vor: Für Mac OS X gibt es keine IDE um ordentlich WoW Addons zu programmieren. Diesen XML-Müll per Hand zu schreiben ist einfach nervig und meiner Meinung nach ist der XML Teil für Frames in WoW richtig dumm. Warum nicht einfach Alles in lua...
Naja auf jeden Fall spiele ich schon lange mit dem Gedanken sowas mal zu machen. Aber alleine ist mir das Warten zu viel Arbeit. Außerdem kann man sich für Updates mehr Zeit lassen wenn man nicht alle Features selbst...
|
Objective C
03/25/2010 - General Coding - 3 Replies
gibt es eine IDE für Objective C für einem Windows-Rechner (wie XCode auf Mac)?
oder kann man nur auf einem Mac mit Objective C programmieren?
Danke im Voraus!
|
All times are GMT +1. The time now is 03:55.
|
|