#include <stdio.h>
#include <string.h>
int main(void) {
char string[10000],*token;
int garden[100],i=0;
fgets(string,10000,stdin);
token = strtok(string," ");
while(strcmp(token,"\n") != 0){
garden[i] = atoi(token);
i++;
token = strtok(NULL," ");
}
return 0;
}
这段代码有什么问题?为什么我不能从一行读取空格分隔的整数?
答案 0 :(得分:2)
更改
while(strcmp(token,"\n") != 0){
到
while(token != NULL){
答案 1 :(得分:0)
只有在最终号码后面有空格时,您的代码才有效。否则strcmp()
永远不会返回非零值,您继续在NULL
指针上调用它。
答案 2 :(得分:0)
按以下方式更改代码:
token = strtok( string, " \n" );
while ( token != NULL && i < 100 )
{
garden[i] = atoi( token );
i++;
token = strtok( NULL, " \n" );
}
答案 3 :(得分:0)
@Igor已经回答了你的问题,但请考虑替代解决方案。
#include <stdio.h>
int main(void) {
int i = 0, garden[100];
while(i < 100 && scanf(" %d", &garden[i++]) == 1);
return 0;
}
答案 4 :(得分:0)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
int garden[10000],length = 0,i;
char string[100];
fgets(string,100,stdin);
char *token;
token = strtok(string," ");
while (token != NULL) {
if(strcmp(token,"\n") == 0)
break;
garden[length] = atoi(token);
token = strtok(NULL," ");
length++;
}
for(i=0; i<length;i++){
printf("%d ",garden[i]);
}
return 0;
}
此代码完美无缺。不幸的是,fgets也会读取换行符。所以不得不照顾好。