我使用fgets()读取一行,该行包含由空格分隔的整数值,如下所示:

while(fgets(str, sizeof(str), stdin) != NULL)

在读取str中的string之后,我使用strtok()将string转换为tokens,然后使用atoi()函数将这些值转换为整数。
token = strtok(str, s);
while( token != NULL)    //If token is NULL then don't convert it to integer
int d = atoi(token);

第一个输入的输出与预期一致。
输入-1:
5 1 0 3 4\n

输出-1:
d=5
d=1
d=0
d=3
d=4

现在,当我在string后面加一个空格并按enter键时,问题就出现了。
输入-2:
5 1 0 3 4 \n

输出-2:
d=5
d=1
d=0
d=3
d=4
d=0

所以现在我的问题是:
一。当结尾只有空格时,strtok()不会返回空值吗?
2。如何区分输出中的两个零?
三。如何避免strtok()读取最后一个空格或结尾处的任意数量的空格?

最佳答案

您使用的函数不正确。作为第二个参数传递的分隔符应该正确。

token = strtok(str," \n\t");  //should use delimiter
while( token != NULL)
{
   int d = atoi(token);
   printf("%d\n",d);
   token = strtok(NULL," \n\t");
}

07-26 00:48
查看更多