Ich habe mit einer Gruppe an einem Google Code Jam-Übungsproblem gearbeitet (Sie können es lesen here). Unser Code ist wie folgt:C Unerwartete Eingaben mit Zeichenarrays
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
main(){
int c;
int n = 0;
int l = 0;
int d = 0;
int caseCount = 0;
int i = 0;
int j = 0;
//A boolean value used in determining parenthesees.
bool letBool = false;
//A boolean value used in determining something;
bool wordBool = false;
//Temporary space for test characters
char test[1000];
//Gets word length
while((c=getchar())!=' ' && c!= '\n'){
l = (l * 10) + c - '0';
//printf("%d\n", l);
}
//Gets number of valid words.
while((c=getchar())!=' ' && c!= '\n'){
d = (d * 10) + c - '0';
//printf("%d\n", d);
}
//Gets number of test cases.
while((c=getchar())!= '\n'){
n = (n * 10) + c - '0';
//printf("%d\n", n);
}
//Array of all valid words.
char dict[d][l];
c=getchar();
//While we still have words to read in.
while(i < d){
//If not new line
if(c!='\n'){
//Then read character
dict[i][j] = c;
}
else{
i++;
j=0;
}
c=getchar();
j++;
}
i = 0;
j = 0;
while(i < n){
j = 0;
while((c=getchar())!='\n' && c!=EOF){
putchar(c);
test[j] = c;
j++;
}
putchar('\n');
test[j+1] = '\0';
printf("%s\n", test);
int word = 0;
//Going through valid words
while(word < d){
wordBool=true;
j = 0;
int letter = 0;
//Going through valid letters
while(letter < l){
letBool=false;
if(test[j] == '('){
while(test[j++]!=')'){
if(dict[word][letter]==test[j]){
letBool=true;
//printf("%s%d%s%d\n" "letBool is true at word: ", word, "letter: ", letter);
}
}
}
else{
if(test[j]==dict[word][letter]){
letBool=true;
//printf("%s%d%s%d\n" "letBool is true at word: ", word, "letter: ", letter);
}
}
j++;
letter++;
if(!letBool){
wordBool=false;
//printf("%s%d%s%d\n" "wordBool is false at word: ", word, "letter: ", letter);
}
}
if(wordBool){
caseCount++;
}
word++;
}
printf("%s%d%s%d\n", "Case #", i+1, ": ", caseCount);
i++;
j=0;
caseCount=0;
}
}
Das Problem ist der Ausgang den Eingang für den „erhielt fremden Code“ Teil mit aus putchar richtig zu lesen scheint, aber wenn es in den Testfall eingegeben wird, wird es beschädigt. Hier ist der Teil über die ich spreche:
while((c=getchar())!='\n' && c!=EOF){
putchar(c);
test[j] = c;
j++;
}
putchar('\n');
test[j+1] = '\0';
printf("%s\n", test);
Wenn wir es diesen Eingang geben:
3 5 4
abc
bca
dac
dbc
cba
(ab)(bc)(ca)
abc
(abc)(abc)(abc)
(zyx)bc
wir bekommen
ab)(bc)(ca)
ab)(bc)(ca)
7
Case #1: 0
abc
abc
b
Case #2: 1
(abc)(abc)(abc)
(abc)(abc)(abc)
Case #3: 0
(zyx)bc
(zyx)bcb
Case #4: 0
(
Case #5: 0
So können wir nicht verstehen, warum es zufällig sind Zeichen wie 7 und b ausgedruckt.
Ein Fehler ist hier: 'Test [j +1] = '\ 0'; 'Es sollte' test [j] = '\ 0'; 'sein, da' j' bereits um den vorherigen Zeichenindex erhöht wurde. –
Vielen Dank für die Hilfe! – MegaZeroX
Das ist eine Wettbewerbsseite. Sie sollten das Problem selbst lösen. Du könntest sogar eine Antwort finden, es gibt immer 'Cheat' Seiten. –