2012-03-27 2 views
0

Для кода ниже, Мой вход являются следующие:Запоминание некоторые части строки

score Bob 10 
score Jill 20 
score Han 20 
highscore 
best Bob 

код:

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


typedef struct score_entry 
{ 
    char name[21]; 
    int score; 
} score_entry; 


int main(void) { 
    int i; 
    char s[100]; 
    score_entry readin[30]; 

    while (1 == scanf("%s",(char*)s)) 
    { 
     if (strncmp(s,"score",5)){ 
      //how to store string an name ? 
      i++; 
     } 
    } 
    return 0; 
} 

Строка s после if утверждения "nameint" ... Я хочу сохранить имя до readin[i].name и int до readin[i].score ... Как именно я могу это сделать?

ответ

1

EDIT

Это работает:

typedef struct score_entry 
{ 
    char name[21]; 
    int score; 
} score_entry; 

int main() 
{ 

    int i, j; 
    int input_tokens; 
    int score; 
    int highest_score; 
    int highest_individual_score; 
    char input[100]; 
    char name[21]; 
    char scoretoken[10]; 
    score_entry readin[30] = {{0}}; 

    i = 0; 

    while(i < 30 && fgets(input, 100, stdin) != NULL) 
    { 
     input_tokens = sscanf(input, "%9s %20s %d", scoretoken, name, &score); 
     if (input_tokens == 3) 
     { 
      if (strncmp(scoretoken, "score", 5) == 0) 
      { 
       strncpy(readin[i].name, name, 20); 
       readin[i].score = score; 
       i++; 
      } 
     } 
     else if (input_tokens == 2) 
     { 
      if (strncmp(scoretoken, "best", 4) == 0) 
      { 
       highest_individual_score = 0; 
       for (j = 0; j < 30; j++) 
       { 
        if (strncmp(readin[j].name, name, 20) == 0 && readin[j].score > highest_individual_score) 
        { 
         highest_individual_score = readin[j].score; 
        } 
       } 
       printf("Highest score for %s: %d\n", name, highest_individual_score); 
      } 
     } 
     else if (input_tokens == 1) 
     { 
      if (strncmp(scoretoken, "highscore", 9) == 0) 
      { 
       highest_score = 0; 
       for (j = 0; j < 30; j++) 
       { 
        if (readin[j].score > highest_score) 
        { 
         highest_score = readin[j].score; 
        } 
       } 
       printf("Highest score: %d\n", highest_score); 
      } 
     } 
    } 

    return 0; 
} 
+0

Извините, я обновил вопрос, иногда я буду вводить рекорды и лучшее «случайное имя» ..... лучший рекордер и оценка - это команды .... Поэтому я не всегда буду вводить 3 вещи ... Вот почему я хочу избежать scanf из 3 вещей ... извините за это. – Thatdude1

+0

@Beginnernato Как вы справитесь со входами 'highscore' и' best [somename] '? –

+0

@Beginnernato Я отредактировал код для разных входов. –

0

если вы хотите использовать зсапЕ для этого, то вы, вероятно, хотите:

int i, num; 
char szScore[10]; 
i=0; 
while(scanf("%s, %s,%d", szScore, s, &num)) 
{ 
    if(!strncmp(szScore, "score", 5) 
    { 
    strcpy(readin[i].name, s); 
    readin[i].score = num; 
    i++; 
    } 
} 
+0

, что о слове "оценка", Я не хочу хранить это? – Thatdude1

+0

IDK, а как насчет слова оценка? Мой ответ основывался на предположении, что у вас может возникнуть трудность в понимании точек доступа (.) Или (->). Что именно ты пытаешься сделать? – Eric

+0

в основном за словом оценка сопровождается именем (строкой) и счетом (int) ... i вводит счет, потому что он в основном говорит мне записывать имя человека и его счет в массиве ... слово «оценка» не имеет другого значения, поэтому я не хочу его хранить. – Thatdude1

Смежные вопросы