C - scanf () vs gets () vs fgets ()

Habe ich auch ein Recht einfaches Programm für das konvertieren einer Zeichenfolge (vorausgesetzt, die zahlen eingegeben werden) in eine Ganzzahl.

Nachdem ich fertig war, bemerkte ich einige sehr eigenartige "bugs", die ich nicht beantworten kann, vor allem, weil mein beschränktes wissen darüber, wie die scanf()gets() und fgets() Funktionen arbeiten. (Ich habe eine Menge Literatur zu Lesen, obwohl.)

So, ohne Schrift, zu viel text, hier ist der code des Programms:

#include <stdio.h>

#define MAX 100

int CharToInt(const char *);

int main()
{
    char str[MAX];

    printf(" Enter some numbers (no spaces): ");
    gets(str);
// fgets(str, sizeof(str), stdin);
// scanf("%s", str);

    printf(" Entered number is: %d\n", CharToInt(str));

    return 0;
}

int CharToInt(const char *s)
{
    int i, result, temp;

    result = 0;
    i = 0;

    while(*(s+i) != '\0')
    {
        temp = *(s+i) & 15;
        result = (temp + result) * 10;
        i++;
    }

    return result / 10;
}

So, hier ist das problem, das ich habe. Erstens, bei der Verwendung von gets() Funktion, funktioniert das Programm perfekt.

Zweite, bei der Verwendung von fgets()das Ergebnis ist etwas falsch, weil anscheinend fgets() Funktion liest newline (ASCII-Wert 10) Zeichen Letzte, die Schrauben bis das Ergebnis.

Dritte, bei der Verwendung von scanf() Funktion, das Ergebnis ist völlig falsch, weil erstes Zeichen hat offenbar einen -52 ASCII-Wert. Dafür habe ich keine Erklärung.

Jetzt weiß ich, dass gets() wird abgeraten, Sie zu verwenden, so möchte ich wissen, wenn ich fgets() hier so nicht gelesen (oder ignoriert) newline-Zeichen.
Auch, was ist der deal mit der scanf() Funktion in diesem Programm?

InformationsquelleAutor der Frage Marko | 2010-07-21

Schreibe einen Kommentar