Я использую strtok для разделения строки, он работает как и ожидалось для первых 4 итераций, но после этого начинает испортиться. Предполагается, что программа возьмет такую строку, как «david 1 2 3 4 5», и распечатайте имя плюс сумму чисел «david 15» ... Однако у меня проблема с strtok.strtok работает не так, как ожидалось, работает только для первых нескольких итераций
EDIT: Я делаю номер указатель для последующего использования кода (это только фрагмент)
Это мой C сценарий:
#include <stdio.h>
#include <string.h>
char str1[50];
char *token;
char *end;
long int *number;
int loop = 1;
while(loop){
fgets(str1,50,stdin);
token = strtok(str1," ");
printf("%s ",token);
*number = 0;
while(token != NULL){
token = strtok(NULL," ");
if(token != NULL){
*number = *number + strtol(token,&end,0);
}
}
printf("%li\n",*number);
}
С этим входом:
David 10 10 10 10 10
Я получаю этот выход:
David 40
Ожидаемый результат:
David 50
Подозревая strtok, я эти заявления тест печати:
char str1[50];
char *token;
char *end;
long int *number;
int loop = 1;
while(loop){
fgets(str1,50,stdin);
token = strtok(str1," ");
printf("%s\n",token);
*number = 0;
while(token != NULL){
printf("before new token: %s\n",token); // <---HERE
token = strtok(NULL," ");
printf("after new token: %s\n\n",token); // <---HERE
if(token != NULL){
*number = *number + strtol(token,&end,0);
}
}
printf("%li\n",*number);
}
И с тем же входом:
David 10 20 30 40 50
я получаю:
David
before new token: David
after new token: 10
before new token: 10
after new token: 20
before new token: 20
after new token: 30
before new token: 30
after new token: 4<
before new token: [email protected]
after new token: (null)
64
Как вы видите, он работает отлично во время первых нескольких итераций, но после этого все начинает плохо. Если кто-нибудь знает, что происходит, я бы очень признателен за совет :) спасибо!
Просто для удовольствия, что произойдет, если добавить пробел после '40'? –
уже есть пробел после 40. Вход - это Давид 10 20 30 40 50 – Vaderico
'number' не указывает на что-либо определенное ... –