[英]Why is strtok printing only first word?
我正在使用strtok將字符串轉換為單個單詞 。 我做了以下事情:
int main() {
char target[100];
char *t;
scanf("%s",target);
t = strtok(target," ");
while (t!= NULL)
{
printf("<<%s>>\n", t);
t = strtok (NULL, " ");
}
return 0;
}
輸入是一個字符串,例如'this is a string',我得到的輸出是<<this>>
。
你寫scanf
的方式只接受字符串直到空格
的scanf( “%S”,目標);
所以你需要改變從控制台獲取輸入的方式
scanf("%99[^\n]",target);
更改:
scanf("%s",target);
至:
fgets(target, 100, stdin);
因為第一個在遇到輸入中的空格時不會停止。
輸出:
this is a string
<<this>>
<<is>>
<<a>>
<<string
>>
注意換行符fgets()存儲如何影響輸出。 如果你願意,你可以簡單地丟棄它,如下所示:
fgets(target, 100, stdin);
target[strlen(target) - 1] = '\0';
現在的輸出是:
this is a string
<<this>>
<<is>>
<<a>>
<<string>>
如果你想繼續使用scanf() ,那么你可以使用下面的代碼片段:
#include<stdio.h>
#include <string.h>
int main() {
char target[100];
char *t;
//scanf("%s",target);
scanf("%99[0-9a-zA-Z ]", target);
printf("%s\n",target);
t = strtok(target," ");
while (t!= NULL)
{
printf("<<%s>>\n", t);
t = strtok (NULL, " ");
}
return 0;
}
在這里工作代碼。
只需編寫scanf("%s",target);
將只讀取輸入直到第一個空格; 這就是為什么你只得到第一個單詞作為輸出。 通過寫scanf("%99[0-9a-zA-Z ]", target);
,您正在從輸入流中讀取99個字符(包括數字0-9
, az
或AZ
和空格)。
希望這是有幫助的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.