2016-09-12 2 views
-3

Wird jemand bitte diesen Code im Detail erklären und warum 0 kommt?Warum ist der Ausgang dieses C-Programms Null?

Source Code:

#include<stdio.h> 
void main(){ 
char *str="Hello"; 
char *ptr = str; 
char least =127; 
while (*ptr++) 
    least = ((*ptr)<(least))?(*ptr):(least); 
printf("%d", least); 
} 

Ausgang:

0 
+2

'* ptr' ist' '\ 0 "". (in der letzten Zeichenfolge) – BLUEPIXY

+0

Mögliches Duplikat von [Does \ * p ++ nach Dereferenzierung erhöhen?] (http://StackOverflow.com/questions/9255147/does-p-increment-after-dereferencing) –

Antwort

4

Es sieht aus wie Sie versuchen, den kleinsten ASCII-Wert in einer Zeichenfolge zu finden.

Das Problem mit Ihrem Code ist, dass die while() Schleife das erste Byte der Zeichenfolge ignoriert und stattdessen die Zeichenfolge '\0' Ende der Zeichenfolge ansieht. Was Sie tun möchten, ist die Schleife zu verlassen vor Sie vergleichen least mit Null.

Versuchen Sie stattdessen:

while (*ptr) { 
    least = ((*ptr)<(least))?(*ptr):(least); 
    ptr++; 
} 
+0

Eigentlich war es MCQ-Typ Frage in einem Papier und nach der Ausgabe gefragt. Ich habe die Antwort kennengelernt, als ich sie auf meiner Maschine lief, aber ich habe keine Ahnung, wie es dazu kam. Deshalb habe ich dich gebeten, das zu erklären. – Arnab

1

Alle Ihre Probleme durch Verschleierung verursacht werden - versuchen, einen einfachen Algorithmus zu schreiben, so weit wie möglich (schlechte Programmierung) kompliziert. Dies verursacht nicht nur die erwähnten Fehler, sondern verringert auch die Lesbarkeit und Leistung.

Haben Sie den einfachen Algorithmus so einfach wie möglich (gute Programmierung) zu schreiben versuchen, es gibt keine Probleme gewesen wäre, und der Code würde auch schneller ausführen:

#include <stdio.h> 
#include <limits.h> 

int main (void) 
{ 
    const char* str="Hello"; 
    char least = CHAR_MAX; 

    for(size_t i=0; str[i] != '\0'; i++) 
    { 
    if(str[i] < least) 
    { 
     least = str[i]; 
    } 
    } 

    printf("%c = %d", least, least); 
} 
+0

Eigentlich war es MCQ Art Frage in einem Papier und nach der Ausgabe gefragt. Ich habe die Antwort kennengelernt, als ich sie auf meiner Maschine lief, aber ich habe keine Ahnung, wie es dazu kam. Deshalb habe ich dich gebeten, das zu erklären. – Arnab