2016-10-08 3 views
0

Ich habe ein einfaches Programm geschrieben, das ein Array umkehrt. Zum Beispiel würde die Zeichenfolge "Hallo" als "olleh" ausgedruckt werden. Wenn ich jedoch etwas wie "Hallo" eingib, druckt es die Hälfte der umgekehrten Zeichenfolge aus, gefolgt von einigen kryptischen Zeichen und anderem Unsinn, der nicht da sein sollte.Warum wird mein Array falsch gedruckt?

Mein Quellcode ist wie folgt:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[100], temp; 
    int i = 0, j = 0; 

    printf("Enter a string:\n"); 
    fgets(str, 100, stdin); 
// scanf("%s", &str); 

    j = strlen(str) - 1; 
    while (i < j) { 
     temp = str[i]; 
     str[i] = str[j]; 
     str[j] = str[temp]; 
     i++; 
     j--; 
    } 

    printf("The reversed string is: %s", str); 

    return (0); 
} 

Einige der Ausgang ich erhalte, ist ‚oll‘ dann ein kleines Quadrat mit vier Zahlen nach innen. Dies kann variieren und manchmal "olx" oder "olH" oder sogar "ol" mit einem Fragezeichen in Rautenform drucken. Warum funktioniert mein Programm nicht so wie es sollte? Enthält das Array bereits andere codierte Informationen?

+0

sein Sollte es nicht str sein [j] = temp; statt str [j] = str [temp]; ? –

Antwort

3

ersetzen Lets an diesen beiden Linien einen genaueren Blick:

temp = str[i]; 
... 
str[j] = str[temp]; 

In den ersten Sie temp auf den Charakter in str[i] gesetzt. Die andere verwenden Sie temp als Index in str. Aber temp ist kein Index, es ist ein Charakter. Die letzte Zeile sollte also

str[j] = temp; 
+0

Vielen Dank für die Aufklärung meiner Verwirrung. Mein Schreiben wird nur ungeschickt, wenn ich müde bin;) – kashveyron

1

Ihr Algorithmus ist in Ordnung. Sie müssen nur

str[j] = str[temp]; 

von

str[j] = temp; 
+0

Oh, jetzt sehe ich, es war nur ein dummer Fehler, den ich beim Schreiben gemacht habe. Aber ich verstehe nicht, wie die zwei Linien anders sind. Machen beide nicht einfach "str [j]" gleich "str [i]"? – kashveyron

+0

Oh warte, jetzt verstehe ich es. Das liegt daran, dass 'str [i]' tatsächlich ein Zeichen darstellt, also sagt 'str [temp]' grundsätzlich 'str [str [i]]', was Sie nicht haben können, weil Sie kein Element mit einem Zeichen referenzieren können. – kashveyron

Verwandte Themen