我知道[^ \ n]是一个分隔符,它使scanf可以扫描所有内容,直到按下“ enter”键为止。但是我不知道其余的“%[^ \ n]%* c”是做什么用的。另外,为什么我们必须在scanf函数中提及“&s”而不是“ s”。
我尝试运行此:
char s[100];
scanf("%[^\n]s",s);
scanf("%[^\n]s",&s);
Run Code Online (Sandbox Code Playgroud)
上面的两个scanf语句对我来说完全一样。如果它们之间有什么区别,那是什么?
另外,为什么我更喜欢 scanf(“%[^ \ n]%* c”,&s); 以上声明?
我有两个代码段,并且都产生不同的结果。我正在使用TDM-GCC 4.9.2编译器,而我的编译器是32位版本
(int的大小为4个字节,float的最小值为-3.4e38)
代码1:
int x;
x=2.999999999999999; // 15 '9s' after decimal point
printf("%d",x);
Run Code Online (Sandbox Code Playgroud)
输出:
2
代码2:
int x;
x=2.9999999999999999; // 16 '9s' after decimal point
printf("%d",x);
Run Code Online (Sandbox Code Playgroud)
输出:
3
为什么在这些情况下隐式转换会有所不同?
是否由于指定的Real常量中的某些溢出而引起的,怎么办?