scanf 不给第二个变量赋值

scanf doesn't assign value to a second variable

我一直在尝试用 C 语言读取用户的一些输入,但它似乎并没有像我希望的那样工作。我尝试读取一个字符串,直到用户写入一个冒号,然后将冒号 (':') 分配给另一个变量。除非冒号是第一个字符,否则它会完美运行。在这种情况下,它只是将值 -52 分配给两个变量并在下一个 scanf 中读取冒号。我试着这样做,这样冒号就会被分配给第二个变量,即使它是第一个。我试过在线查找但找不到任何解决方案...任何提示都将非常有用,谢谢!

我的尝试:

char ch, name[200];
scanf("%[^:]%c", &name, &ch);
printf("%s\n%c\n", name, ch);

对于有效输入,例如:

Nadav Freedman: rest_of_input

有效并将 "Nadav Freedman" 分配给 name 并将 ':' 分配给 ch

但对于无效输入,例如:

: rest_of_input

它根本没有为变量赋值,尽管我想将冒号保存到 ch

一旦提供的任何说明符与输入不匹配,

scanf 就会停止读取,因此在您的情况下,如果 %[^:] 失败,函数将停止读取并且 %c不处理说明符。

所以强制它读取冒号使用 2 scanfs 而不是 1:

char ch, name[200];
if(scanf(" %199[^:]", name) != 1) name[0] = '[=10=]';
scanf("%c", &ch);
printf("%s\n%c\n", name, ch);

OBS:我还添加了前导 space 以消除前导空白字符。并限制它最多读取199个字符,以免超过数组的大小name。如果第一个 scanf 无法读取任何内容,还更改它以更新数组 name 以存储空字符串。