ΔημητρηςΦου Δημοσ. 26 Νοεμβρίου 2013 Μέλος Δημοσ. 26 Νοεμβρίου 2013 #include<stdio.h> #include<string.h> #include<ctype.h> main() { int i,j,k,metritis,d=0; char prot[200],prot1[200]; printf("dwse mia protasi :\n"); gets(prot); while(stricmp(prot,"END OF PROGRAM")!=0){ if(stricmp(prot,"END OF PROGRAM")==0) return 0; else for(i=0;i<strlen(prot);i++){ if((prot[i]>=97)&&(prot[i]<=122)) prot1[i]=prot[i]-'a' + 'A'; else prot1[i]=prot[i]; } metritis=strlen(prot); for(j=0;j<metritis;j++){ if(prot1[j]!=32){ for(k=0;k<4;k++){ printf("*");}} else { for(k=0;k<3;k++){ printf("*"); }//edw tha einai i proti grammi// }} printf("*"); printf("\n"); for(i=0;i<metritis;i++) { printf("*"); if(prot1[i]!=32){ printf("%c",prot1[i]); } else printf("%c",prot1[i]); if(i==metritis-1) printf("*"); } printf("\n"); for(j=0;j<metritis;j++){ if(prot1[j]!=32) { for(k=0;k<4;k++) { printf("*"); } } else{ for(k=0;k<3;k++) printf("*"); }//triti grammi// } printf("*"); metritis++; printf("\n"); printf("dwse mia protasi :\n"); gets(prot); } return 0; } το τρέχει κανονικά...δεν έχει κανένα σφάλμα..άμα μπορείς και το τρέξεις για να δεις τι βγάζει.
migf1 Δημοσ. 26 Νοεμβρίου 2013 Δημοσ. 26 Νοεμβρίου 2013 Φίλε Δημήτρη, με λύπη μου διαπιστώνω πως εξακολουθείς να μη χρησιμοποιείς σχόλια στον κώδικά σου, οπότε συνεχίζεις να μας αποτρέπεις από το να ασχοληθούμε περαιτέρω (αν και ήδη έχουμε ασχοληθεί πάρα πολύ και στην ουσία σου έχουμε λύσει την άσκηση με 2-3 διαφορετικούς τρόπους, και στο μιλητό και με κώδικα). Εξακολουθείς επίσης να γράφεις: main() αντί για int main( void ) όπως σου υπέδειξε αν θυμάμαι καλά στο άλλο νήμα ο ημίθεος, εξακολουθείς να μη χρησιμοποιείς κενά για να διαχωρίζεις λογικές ενότητες του κώδικα ή ακόμα και μέσα σε γραμμές, κι εξακολουθείς να χρησιμοποιείς την μη στάνταρ συνάρτηση stricmp() έναντι της στάνταρ strcmp() (σου έχουν ήδη δοθεί hints για την ασυμβατότητα της stricmp() και σε αυτό το νήμα από τον praetorian και στο άλλο από τον ημίθεο). Αυτό που καταλαβαίνω εγώ είναι πως θέλεις, πως να το πω, να μας "πιέσεις" να προσαρμοστούμε εμείς στις κακές πρακτικές του κώδικά σου (αναγνωρίζω φυσικά πως δεν τις ακολουθείς συνειδητά, αλλά επειδή ακόμα τώρα μαθαίνεις) ενώ το χρήσιμο για σένα κατά την άποψη μου είναι το ακριβώς αντίθετο: να προσαρμοστείς δηλαδή εσύ στις υποδείξεις των πιο έμπειρων (ειδικά στα σημεία που οι υποδείξεις τους συμπίπτουν). Εφόσον έληξε η προθεσμία της άσκησης αλλά σε ενδιαφέρει ακόμα να τη λύσεις (που είναι πολύ καλός οιωνός και για τις προθέσεις και για τον χαρακτήρα σου) πιστεύω ακράδαντα πως είναι πολύ καλή ιδέα να ξεκινήσεις καθαρο-γράφοντας τον κώδικά σου, επιλέγοντας κάποιο από τα δημοφιλή Coding-Standards που σου έχουμε ήδη υποδείξει, και βάζοντας σχόλια. Κατά την προσωπική μου άποψη, κι εφόσον έχεις ήδη καταθέσει πως σε ενδιαφέρει να ασχοληθείς σοβαρά με τον προγραμματισμό, αυτό είναι πολύ πιο σημαντικό στην παρούσα φάση από το να λύσεις μια άσκηση. Το αμέσως επόμενο σημαντικότερο, πάντα εκφράζοντας την προσωπική μου άποψη, είναι να μάθεις πως να αυξάνεις το επίπεδο προειδοποιήσεων του compiler που χρησιμοποιείς και κατόπιν να τις ερμηνεύεις, καθώς και το να μάθεις να χρησιμοποιείς τον debugger του compiler σου. Σε ότι αφορά την άσκηση αυτή κάθε αυτή, εφόσον έληξε η προθεσμία της, σου παραθέτω δυο παραπλήσιες, πιθανές λύσεις της σύμφωνα και με το νέο δεδομένο που πρόσθεσες (να τυπώνει δηλαδή 2 γραμμές από αστεράκια εκατέρωθεν του formatted input) αλλά παρόλο που χρησιμοποιώ sane στοίχιση, spaces, και ονόματα μεταβλητών/συναρτήσεων, κλπ, στις παραθέτω επίτηδες χωρίς το παραμικρό σχόλιο ελπίζοντας πως θα σε αφυπνίσω και θα καταλάβεις πόσο σημαντικός είναι ο ρόλος τους. Αν περιέχει πράγματα που δεν έχετε μάθει, ένας λόγος παραπάνω για τη χρησιμότητα ύπαρξης σχολίων (με την έννοια ότι εφόσον ενδιαφέρεσαι να ασχοληθείς, τα σχόλια θα σε βοηθούσαν να καταλάβεις τι περίπου κάνει το επίμαχο σημείο και πως το κάνει, ώστε να το ψάξεις και μόνος σου περαιτέρω). Για εναλλαγή μεταξύ των 2 τρόπων επίλυσης, αλλάζουμε το #if 0 σε #if 1 και ξανά κάνουμε compile & run... Κώδικας: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <ctype.h> #define MAXINPUT (255+1) #define STR_EXIT "THIS IS THE END" #define FLUSH_STDIN() \ do { \ int c; \ while ( '\n' != (c=getchar()) && EOF != c ) \ ; \ } while(0) void print_bounding_line( int c, int len ) { while ( len-- > 0 ) { putchar(c); } putchar('\n'); } int main( void ) { #if 0 for (; { int i, c = '\0'; bool isInputOk = true; char input[MAXINPUT] = {'\0'}; int nspaces = 0, nalphas = 0; printf( "Enter a phrase using only latin letters & blanks. To exit type: %s\n", STR_EXIT ); for ( i=0; i < MAXINPUT-1 && '\n' != (c = toupper( getchar())) && EOF != c; i++ ){ if ( isspace(c) ) { nspaces++; } else if ( isalpha(c) ) { nalphas++; } else { FLUSH_STDIN(); puts( "*** only latin letters & blanks are allowed, try again...\n" ); isInputOk = false; break; } input[i] = c; } input[i] = '\0'; if ( !isInputOk ) { continue; } if ( 0 == strcmp(input, STR_EXIT) ) { break; } int lenOut = 2 * nspaces + 4 * nalphas + 1; print_bounding_line('*', lenOut); for (i=0; input[i]; i++) { if ( isspace(input[i]) ) { printf( "* " ); } else { printf( "* %c ", input[i] ); } } printf("*\n"); print_bounding_line('*', lenOut); } #else for (; { char *cp = NULL; bool isInputOk = true; char input[MAXINPUT] = {'\0'}; int nspaces = 0, nalphas = 0; printf( "Enter a phrase using only latin letters & blanks. To exit type: %s\n", STR_EXIT ); if ( NULL == fgets(input, MAXINPUT, stdin) ) { puts( "** fatal error, aborting program..." ); exit(1); } cp = strchr(input,'\n'); if ( NULL == cp ) { FLUSH_STDIN(); } else { *cp = '\0'; } for (cp=input; *cp; cp++) { if ( isspace(*cp) ) { nspaces++; } else if ( isalpha(*cp) ) { nalphas++; } else { puts( "*** only latin letters & blanks are allowed, try again...\n" ); isInputOk = false; break; } *cp = toupper( *cp ); } if ( !isInputOk ) { continue; } if ( 0 == strcmp(input, STR_EXIT) ) { break; } int lenOut = 2 * nspaces + 4 * nalphas + 1; print_bounding_line('*', lenOut); for (cp=input; *cp; cp++) { if ( isspace(*cp) ) { printf( "* " ); } else { printf( "* %c ", *cp ); } } printf("*\n"); print_bounding_line('*', lenOut); } #endif return 0; } Ίσως μια χρήσιμη ιδέα είναι να προσπαθήσεις να του προσθέσεις σχόλια (ή τώρα ή αργότερα αν περιέχει πράγματα που δεν έχετε μάθει ακόμα). 4
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα