我使用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");
}