C 编程 - 读取空间将字符串分隔到 BST



我试图读取用户输入的人名,名字和姓氏用空格分隔,个人名字用换行符分隔。

例如:

乔治·布什

奥巴马

唐纳德·特朗普

这是我到目前为止的代码:

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)

最新更新