我试图读取用户输入的人名,名字和姓氏用空格分隔,个人名字用换行符分隔。
例如:
乔治·布什
奥巴马
唐纳德·特朗普
这是我到目前为止的代码:
int main(int argc, char** argv) {
char string[20+1];
struct bst* tree = NULL;
printf("Enter some strings: n");
while (scanf("%[^n]%*c",string)) {
tree=insert(tree,string);
}
}
我的插入功能是:
struct bst*
insert(struct bst* tree, char input[]) {
struct bst* newnode;
newnode = (struct bst*)malloc(sizeof(*newnode));
strcpy(newnode->data, input);
newnode->left = newnode->right = NULL;
if (tree == NULL) {
return newnode;
}
if (strcmp(input,tree->data)<0) {
tree->left=insert(tree->left,input);
} else {
tree->right=insert(tree->right,input);
}
return tree;
}
问题是对用户输入的扫描没有尽头。 当我将 scanf 更改为 scanf("%s",字符串(时,它可以工作,但我无法存储名字和姓氏,因为它们用空格分隔。
参考评论中指出的内容,
从这里scanf
返回值:
成功分配的接收参数数(如果在分配第一个接收参数之前发生匹配失败,则可能为零(,如果在分配第一个接收参数之前发生输入失败,则为 EOF。
while
中的条件需要更改,因为:
EOF 是类型为
int
和负值的整数常量表达式。
因此,将while
更改为:
while (scanf("%[^n]%*c",string) == 1)