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

int main(int argc, char *argv[]) {
    char token[20][256];
    char input[256];
    char *ctmp;
    int i = 1, cnt = 1;
    printf("$");
    scanf("%s", input);
    ctmp = strtok(input, " ");
    while (ctmp != NULL) {
        strcpy(token[cnt++], ctmp);
        ctmp = strtok(NULL, " ");
    }
    while (i < cnt) {
        printf("%s\n", token[i]);
        i++;
        system("pause");
    }

    return 0;
}

我正在尝试编写一个可以将“”从句子中分成令牌的程序。但它只适用于第一个词而不是第二个词..

为什么会这样?难道我做错了什么?

4

2 回答 2

3

scanf一直读到一个空格,所以你应该使用fgetswhich 读到行尾(或 EOF,以先发生者为准),所以它应该是:

  fgets(input, sizeof input, stdin);

(有关更多详细信息,请查看http://en.cppreference.com/w/c/io/fgets

您读取的行也可能比缓冲区能够容纳的更长,因此您可能需要一个额外的循环来获取整行并相应地调整缓冲区的大小,或者逐块迭代地处理行块。

于 2013-09-12T15:49:07.950 回答
0

int main() {

char *s;
s = malloc(1024 * sizeof(char));
scanf("%[^\n]", s);
s = realloc(s, strlen(s) + 1); 
int lengths=strlen(s);
if(lengths<=1000&&lengths>=1){
    char *tokens=strtok(s," ");

while(tokens!=NULL){
    printf("%s\n",tokens);
    tokens=strtok(NULL," ");
}

}



return 0;

}

于 2018-10-23T15:51:41.123 回答