我只是C语言程序员的初学者。尝试做一个基本程序,当我执行并引入任何一个数字时会出现此错误。
#include <stdio.h>
int main ()
{
float a;
scanf("%f",a);
printf("%f\n",a);
return (0);
}
答案 0 :(得分:4)
记住scanf是一个函数,你遇到的问题是直接传递变量。通过这样做,程序将收到变量的副本,并且将无法修改main中包含的变量。 Scanf使用指向数据类型的指针,这就是你需要传递指针的原因。 这应该解决它:
的scanf(&#34;%F&#34;,&安培;一个);
注意:使用&amp;您正在使用该变量的内存位置(与指针相同)。
你得到一个seg错误的原因是内部scanf一旦该函数获取用户输入它将做的事情
*a = user_input;//suppose the user_input was a float(already converted from a string)
如果直接传递变量,它将尝试推断包含的值。
答案 1 :(得分:2)
scanf
期望变量a
的地址;您实际传递的是变量a
的内容,它是a) indeterminate 1 ,以及b)非常可能不是有效的 2 地址。
您需要使用一元&
运算符来获取a
的地址:
scanf( "%f", &a );
此规则的例外是当您读取字符串并将其存储到char
数组时;数组是特殊的,在大多数情况下,数组表达式被视为,就像它是指向数组的第一个元素的指针一样,因此在读取文本字符串时,您将执行以下操作:< / p>
char str[N]; // for some size N
scanf ("%s", str ); // no & for array parameters
<小时/> 1。除非它在文件范围(任何函数体外)或
static
关键字声明,否则变量不会被初始化为任何特定值;它的内容将是随机垃圾。
答案 2 :(得分:1)
实际上问题在于:
scanf("%f",a);
它应该是:
scanf("%f",&a);
据男人说:
scanf()系列函数根据格式扫描输入,如下所述。此格式可能包含转换规范;此类转换的结果(如果有)存储在格式为的指针参数指向的位置。每个指针参数必须是适合相应转换规范返回的值的类型。