2017-10-31 4 views
-1

Programm wird prüfen, ob ein gegebenes Wort groß geschrieben ist oder nicht. Wenn nicht, wird die Ausgabe großgeschrieben und gedruckt. Während der Großschreibung bleiben alle Buchstaben außer der ersten unverändert.Word Großschreibung falsche Antwort in Online-Richter

Eingabe: Eine einzelne Zeile enthält ein nicht leeres Wort. Dieses Wort besteht aus englischen Klein- und Großbuchstaben. Die Länge des Wortes wird 1000 nicht überschreiten.

Ausgabe: Gibt das angegebene Wort nach Großschreibung aus.

Zum Beispiel:

Eingang: APFEL

Ausgang: APFEL

Eingang: Konjac

Ausgang: Konjac

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

int main(void) 
{ 
char word[1000]; 
int lengthOfWord, i; 

scanf("%[^\n]c",word); 

lengthOfWord = strlen(word); 

if(word[0]>=97 && word[0]<=122) 
    word[0] = word[0] - 32; 

for(i=0; i<=lengthOfWord; i++) 
    printf("%c",word[i]); 


return 0; 
} 

ich debuggen, dieses Programm in Codeblocks 16.01. Es zeigt keinen Fehler an. Aber es zeigt falsche Antwort, wenn ich im Online-Richter (vjudge) einreiche.

Ich weiß einfach nicht genau, was das Problem ist. Könnte mir jemand helfen, dieses Problem zu untersuchen?

Vielen Dank.

+0

Ihre 'scanf' braucht'% s', nicht '% c ' –

+1

' i <= lengthOfWord' sollte 'sein i

+0

' wenn (Wort [0]> = 97 && Wort [0] <= 122) 'wäre besser geschrieben als' if (Wort [0]> = 'a' && Wort [0] <= 'z') ' –

Antwort

0

Der Gesamtansatz zur Durchführung der gewünschten Operation (wenn ich die Problembeschreibung verstehe) ist fehlerhaft und nutzt nicht die verfügbare C-Funktionalität.

Der folgende vorgeschlagenen Code:

  1. führt die gewünschte Operation
  2. keine 'magische' Zahlen enthält. Hinweis: "Magische" Zahlen sind Zahlen ohne Grundlage. I.E. 97122321000
  3. nutzt die ctype.h Header-Datei Inhalt
  4. enthält nicht jede Header-Dateien diese Inhalte werden nicht verwendet.
  5. Dokumente, warum jeder Header-Datei
  6. korrekt enthalten ist, begrenzt die Gesamt Zeichen, die ein Zeitlimit
  7. die printf() Funktion ist sehr CPU-Zyklen teuer und die meisten Codierung Übungen eingegeben werden können. So reduziert sich die Anzahl der Anrufe auf printf() von (bis zu 1000) auf einen einzigen Anruf.

und nun die vorgeschlagene Code:

#include <stdio.h> // scanf(), printf() 
#include <ctype.h> // toupper() 

// max input characters +1 for the trailing NUL byte 
// that is added by `scanf()` when using the '%s' or '%[...]' specifier 
#define MAX_WORD_LEN 1001 

int main(void) 
{ 
    char word[ MAX_WORD_LEN ]; 

    // the format string has no MAX CHARACTERS limit on the input 
    // the format string is expecting a character 'c' but 
    // the next character in the input stream is a newline 
    //scanf("%[^\n]c",word); 
    scanf("%1000[^\n]", word); 

    // 'toupper()' returns an 'int', so need to cast to 'char' 
    // to avoid any implicit conversion compiler warning 
    word[0] = (char)toupper(word[0]); 

    printf("%s\n", word); 

    return 0; 
}