Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - strano output
Forum - C/C++ - strano output

Avatar
frankus89 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/02/2009

Segnala al moderatore
Postato alle 20:29
Domenica, 05/04/2009
osservate questo programma (che dovrebbe essere stato scritto in maniera corretta):

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.         char stringa [30];
  8.         cout<<"stringa: ";
  9.         gets(stringa);
  10.         for (int i=0;i<30;i++)
  11.                 //printf("%c",stringa[i]);
  12.                 cout << stringa[i];
  13.                
  14.         return 0;




questo l'output:

Codice sorgente - presumibilmente Delphi

  1. boss@linux-gwqn:~/Desktop> g++ prova2.cpp
  2. /tmp/ccX2SWet.o: In function `main':
  3. prova2.cpp:(.text+0x88): warning: the `gets' function is dangerous and should not be used.
  4. boss@linux-gwqn:~/Desktop> ./a.out
  5. stringa: prova
  6. prova&#65533;&#37183;X&#65533;)X&#65533;&#65533;&#65533;&#65533;&#65533;&#37183;&#65533;




che razza di errore è questo?:blush:

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:24
Domenica, 05/04/2009
Il programma non e' giusto e l'output e' corretto ...

Se visualizzi 30 caratteri di una stringa senza controllare quando questa termina, avrai a video il contenuto della stringa seguita dai caratteri casuali come nell'output che hai mostrato ...

PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 7:10
Martedì, 07/04/2009
scusa ma perchè lo hai scritto in forma di commento:
Codice sorgente - presumibilmente Plain Text

  1. //printf("%c",stringa[i]);


Credo sia lì l'errore, perchè non viene nessuna lettura e quindi quando stampa la stringa, ti mostra dei caratteri a caso.
Correzione:
Codice sorgente - presumibilmente Plain Text

  1. printf("%c",stringa[i]);


PM Quote
Avatar
frankus89 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/02/2009

Segnala al moderatore
Postato alle 9:55
Martedì, 07/04/2009
l'istruzione fra commenti era per denotare il fatto che ottenevo lo stesso risultato con printf e con cout.
Comunque adesso ho capito l'errore, ma il mio programma continua a non funzionare a run time.
vi passo il codice, con la speranza che qualcuno possa risolvere il bug.
Ps: un banale propgramma di crittografia..

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string.h>
  4. using namespace std;
  5.  
  6.  
  7. void stampa_menu();
  8. void decode(char *,int);
  9. void code(char *,int);
  10.  
  11.  
  12.  
  13. int main()
  14. {
  15.         char str [30];
  16.         int scelta,x;
  17.         char ch;
  18.         cout<<"Inserisci una stringa: ";
  19.         gets(str);
  20.         x=strlen(str);
  21.                 do {
  22.                 stampa_menu();
  23.                 cout<<"Digita il numero dell'operazione che vuoi eseguire: ";
  24.                 cin>>scelta;
  25.                 switch (scelta) {
  26.                         case 1: decode(str,x);
  27.                                 break;
  28.                         case 2: code(str,x);
  29.                                 break;
  30.                         case 3: exit(1);
  31.                                 break;
  32.                         }
  33.                 }while (scelta>4 && scelta<0);
  34.         return 0;
  35. }
  36.  
  37. void stampa_menu() {
  38.         cout<<"1) Decodifica una password; \n";
  39.         cout<<"2) Codifica una password \n";
  40.         cout<< "3) Esci dal programma";
  41. }
  42.  
  43. void code(char *stringa,int k) {
  44.        
  45.         char string_new [30];
  46.         for(int i=0;strlen(stringa)<k;i++){
  47.                 switch(stringa[i]) {
  48.                         case 'A': string_new[i]= 'q';
  49.                         break;
  50.                         case 'B': string_new[i]= 'w';
  51.                         break;
  52.                         case 'C': string_new[i]= 'e';
  53.                         break;
  54.                         case 'D': string_new[i]= 'r';
  55.                         break;
  56.                         case 'E': string_new[i]= 't';
  57.                         break;
  58.                         case 'F': string_new[i]= 'y';
  59.                         break;
  60.                         case 'G': string_new[i]= 'u';
  61.                         break;
  62.                         case 'H': string_new[i]= 'i';
  63.                         break;
  64.                         case 'I': string_new[i]= 'o';
  65.                         break;
  66.                         case 'J': string_new[i]= 'p';
  67.                         break;
  68.                         case 'K': string_new[i]= 'a';
  69.                         break;
  70.                         case 'L': string_new[i]= 's';
  71.                         break;
  72.                         case 'M': string_new[i]= 'd';
  73.                         break;
  74.                         case 'N': string_new[i]= 'f';
  75.                         break;
  76.                         case 'O': string_new[i]= 'g';
  77.                         break;
  78.                         case 'P': string_new[i]= 'h';
  79.                         break;
  80.                         case 'Q': string_new[i]= 'j';
  81.                         break;
  82.                         case 'R': string_new[i]= 'k';
  83.                         break;
  84.                         case 'S': string_new[i]= 'l';
  85.                         break;
  86.                         case 'T': string_new[i]= 'z';
  87.                         break;
  88.                         case 'U': string_new[i]= 'x';
  89.                         break;
  90.                         case 'V': string_new[i]= 'c';
  91.                         break;
  92.                         case 'W': string_new[i]= 'v';
  93.                         break;
  94.                         case 'X': string_new[i]= 'b';
  95.                         break;
  96.                         case 'Y': string_new[i]= 'n';
  97.                         break;
  98.                         case 'Z': string_new[i]= 'm';
  99.                         break;
  100.                         case 'a': string_new[i]= 'Q';
  101.                         break;
  102.                         case 'b': string_new[i]= 'W';
  103.                         break;
  104.                         case 'c': string_new[i]= 'E';
  105.                         break;
  106.                         case 'd': string_new[i]= 'R';
  107.                         break;
  108.                         case 'e': string_new[i]= 'T';
  109.                         break;
  110.                         case 'f': string_new[i]= 'Y';
  111.                         break;
  112.                         case 'g': string_new[i]= 'U';
  113.                         break;
  114.                         case 'h': string_new[i]= 'I';
  115.                         break;
  116.                         case 'i': string_new[i]= 'O';
  117.                         break;
  118.                         case 'j': string_new[i]= 'P';
  119.                         break;
  120.                         case 'k': string_new[i]= 'A';
  121.                         break;
  122.                         case 'l': string_new[i]= 'S';
  123.                         break;
  124.                         case 'm': string_new[i]= 'D';
  125.                         break;
  126.                         case 'n': string_new[i]= 'F';
  127.                         break;
  128.                         case 'o': string_new[i]= 'G';
  129.                         break;
  130.                         case 'p': string_new[i]= 'H';
  131.                         break;
  132.                         case 'q': string_new[i]= 'J';
  133.                         break;
  134.                         case 'r': string_new[i]= 'K';
  135.                         break;
  136.                         case 's': string_new[i]= 'L';
  137.                         break;
  138.                         case 't': string_new[i]= 'Z';
  139.                         break;
  140.                         case 'u': string_new[i]= 'X';
  141.                         break;
  142.                         case 'v': string_new[i]= 'C';
  143.                         break;
  144.                         case 'w': string_new[i]= 'v';
  145.                         break;
  146.                         case 'x': string_new[i]= 'b';
  147.                         break;
  148.                         case 'y': string_new[i]= 'n';
  149.                         break;
  150.                         case 'z': string_new[i]= 'm';
  151.                         break;
  152.                         case '0': string_new[i]= '=';
  153.                         break;
  154.                         case '1': string_new[i]= ')';
  155.                         break;
  156.                         case '2': string_new[i]= '(';
  157.                         break;
  158.                         case '3': string_new[i]= '/';
  159.                         break;
  160.                         case '4': string_new[i]= '&';
  161.                         break;
  162.                         case '5': string_new[i]= '%';
  163.                         break;
  164.                         case '6': string_new[i]= '$';
  165.                         break;
  166.                         case '7': string_new[i]= '-';
  167.                         break;
  168.                         case '8': string_new[i]= '"';
  169.                         break;
  170.                         case '9': string_new[i]= '!';
  171.                         break;
  172.                         case ' ': string_new[i]= '|';
  173.                         break;
  174.                         case '\0': break;
  175.                         default: exit(1);
  176.                         }
  177.                         cout<<"Parola: ";
  178.                 for(int i=0;strlen(string_new)<=k;i++)
  179.                         cout<<string_new[i];
  180.                 }
  181.                
  182.                 }
  183.        
  184. void decode(char *stringa, int k) {
  185.        
  186.         char string_new [30];
  187.         for(int i=0;strlen(stringa)<k;i++){
  188.                 switch(stringa[i]) {
  189.                        
  190.                         case 'q': string_new[i]= 'A';
  191.                         break;
  192.                         case 'w': string_new[i]= 'B';
  193.                         break;
  194.                         case 'e': string_new[i]= 'C';
  195.                         break;
  196.                         case 'r': string_new[i]= 'D';
  197.                         break;
  198.                         case 't': string_new[i]= 'E';
  199.                         break;
  200.                         case 'y': string_new[i]= 'F';
  201.                         break;
  202.                         case 'u': string_new[i]= 'G';
  203.                         break;
  204.                         case 'i': string_new[i]= 'H';
  205.                         break;
  206.                         case 'o': string_new[i]= 'I';
  207.                         break;
  208.                         case 'p': string_new[i]= 'J';
  209.                         break;
  210.                         case 'a': string_new[i]= 'K';
  211.                         break;
  212.                         case 's': string_new[i]= 'L';
  213.                         break;
  214.                         case 'd': string_new[i]= 'M';
  215.                         break;
  216.                         case 'f': string_new[i]= 'N';
  217.                         break;
  218.                         case 'g': string_new[i]= 'O';
  219.                         break;
  220.                         case 'h': string_new[i]= 'P';
  221.                         break;
  222.                         case 'j': string_new[i]= 'Q';
  223.                         break;
  224.                         case 'k': string_new[i]= 'R';
  225.                         break;
  226.                         case 'l': string_new[i]= 'S';
  227.                         break;
  228.                         case 'z': string_new[i]= 'T';
  229.                         break;
  230.                         case 'x': string_new[i]= 'U';
  231.                         break;
  232.                         case 'c': string_new[i]= 'V';
  233.                         break;
  234.                         case 'v': string_new[i]= 'W';
  235.                         break;
  236.                         case 'b': string_new[i]= 'X';
  237.                         break;
  238.                         case 'n': string_new[i]= 'Y';
  239.                         break;
  240.                         case 'm': string_new[i]= 'A';
  241.                         break;
  242.                         case 'Q': string_new[i]= 'a';
  243.                         break;
  244.                         case 'W': string_new[i]= 'b';
  245.                         break;
  246.                         case 'E': string_new[i]= 'c';
  247.                         break;
  248.                         case 'R': string_new[i]= 'd';
  249.                         break;
  250.                         case 'T': string_new[i]= 'e';
  251.                         break;
  252.                         case 'Y': string_new[i]= 'f';
  253.                         break;
  254.                         case 'U': string_new[i]= 'g';
  255.                         break;
  256.                         case 'I': string_new[i]= 'h';
  257.                         break;
  258.                         case 'O': string_new[i]= 'i';
  259.                         break;
  260.                         case 'P': string_new[i]= 'j';
  261.                         break;
  262.                         case 'A': string_new[i]= 'k';
  263.                         break;
  264.                         case 'S': string_new[i]= 'l';
  265.                         break;
  266.                         case 'D': string_new[i]= 'm';
  267.                         break;
  268.                         case 'F': string_new[i]= 'n';
  269.                         break;
  270.                         case 'G': string_new[i]= 'o';
  271.                         break;
  272.                         case 'H': string_new[i]= 'p';
  273.                         break;
  274.                         case 'J': string_new[i]= 'q';
  275.                         break;
  276.                         case 'K': string_new[i]= 'r';
  277.                         break;
  278.                         case 'L': string_new[i]= 's';
  279.                         break;
  280.                         case 'Z': string_new[i]= 't';
  281.                         break;
  282.                         case 'X': string_new[i]= 'u';
  283.                         break;
  284.                         case 'C': string_new[i]= 'v';
  285.                         break;
  286.                         case 'V': string_new[i]= 'w';
  287.                         break;
  288.                         case 'B': string_new[i]= 'x';
  289.                         break;
  290.                         case 'N': string_new[i]= 'y';
  291.                         break;
  292.                         case 'M': string_new[i]= 'z';
  293.                         break;
  294.                         case '=': string_new[i]= '0';
  295.                         break;
  296.                         case ')': string_new[i]= '9';
  297.                         break;
  298.                         case '(': string_new[i]= '8';
  299.                         break;
  300.                         case '/': string_new[i]= '7';
  301.                         break;
  302.                         case '&': string_new[i]= '6';
  303.                         break;
  304.                         case '%': string_new[i]= '5';
  305.                         break;
  306.                         case '$': string_new[i]= '4';
  307.                         break;
  308.                         case '-': string_new[i]= '3';
  309.                         break;
  310.                         case '"': string_new[i]= '2';
  311.                         break;
  312.                         case '!': string_new[i]= '1';
  313.                         break;
  314.                         case ' ': string_new[i]= '|';
  315.                         break;
  316.                        
  317.                 }
  318.                 cout<<"Parola: ";
  319.                 for (int i=0;strlen(string_new)<k;i++)
  320.                 cout<<string_new[i];
  321.                 }
  322.         }




salutiii!:)

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:36
Martedì, 07/04/2009
Testo quotato

Postato originariamente da frankus89:

l'istruzione fra commenti era per denotare il fatto che ottenevo lo stesso risultato con printf e con cout.
Comunque adesso ho capito l'errore, ma il mio programma continua a non funzionare a run time.
vi passo il codice, con la speranza che qualcuno possa risolvere il bug.
Ps: un banale propgramma di crittografia..

[...]


salutiii!:)



Cosa ti da come output?

PM Quote