开始,我是C语言的初学者,只是在C程序中遇到了输入字符串的怪异方法:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char ch, string[100], sent[100];
scanf("%c", &ch);
scanf("%s", &string);
scanf("%[^\n]%*c", &sent);
printf("%c\n", ch);
printf("%s\n", string);
printf("%s", sent);
return 0;
}
这里是错误:最后一行(句子)没有打印,不知道我错了,但是在研究中我找到了此代码:
scanf(" %[^\n]%*c", &sent); //not theres a space before %[^\n]%*c; and then it worked (wtf)
您能通过在其中添加一个空格来解释为什么它起作用。
格式字符串中的空格()导致scanf跳过输入中的空白。通常不需要它,因为大多数scanf转换在扫描任何内容之前也会跳过空格,但是两个不为
%c
和%[
的空格-因此在%[
之前使用空格具有明显的效果。让我们看看您的3个scanf调用做什么: