Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 处理字符时出现分段错误_C - Fatal编程技术网

C 处理字符时出现分段错误

C 处理字符时出现分段错误,c,C,值得注意的是,我对C语言还很陌生,而且对C语言还是个初学者。这个问题困扰了我一段时间,我想这里可能有人能帮上忙 代码如下: #include <stdio.h> #include <stdlib.h> int main() { int age; printf("Enter your age: "); scanf("%d", &age); printf("You are %d ye

值得注意的是,我对C语言还很陌生,而且对C语言还是个初学者。这个问题困扰了我一段时间,我想这里可能有人能帮上忙

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int age;
    printf("Enter your age: ");
    scanf("%d", &age);
    printf("You are %d years old \n", age);

    double gpa;
    printf("Enter your GPA: ");
    scanf("%lf", &gpa);
    printf("You're GPA is %lf \n", gpa);    

    char name[20];
    printf("Please enter your name: ");
    scanf("%s", &name);
    printf("Your name is %s \n", name);

    char grade;
    printf("Enter your grade: ");
    scanf("%s", &grade);
    printf("Your grade it %s \n ", grade);

return 0;
}


希望这里有人能帮忙。祝你一切顺利

获取等级输入的输入将是

scanf(“%c”、&grade)

出现此问题是因为等级是一个char变量,而不是
char
数组

char
->
%c


char
array(也称为C中的字符串)->
%s

出现
segmentation错误的原因是,您将输入的
B
扫描为字符串而不是字符(它相当于
{'B','\0'}
,因此它不仅仅是
B
)您正试图将此字符串分配到
字符中

如果您想获得一个字符作为输入(似乎您希望这样),您必须执行以下操作:

scanf ("%c",&grade);
%c
格式说明符用于扫描
char
s,而
&grade
基本上是级别的地址

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 但是,如果要获取字符串作为输入(即C中的字符数组),则必须如下定义等级:

char grade [n];
n
是表示数组大小的数字)

并且
scanf
行必须是:

scanf ("%s",grade);
%s
格式说明符用于获取
字符串
s(即C中的字符数组)。我们使用
grade
而没有(
&
)运算符地址的原因与指针有关。因为
grade
已经是一个指针;我们需要它的值(即数组第一个字符的地址),而不是地址。检查链接以获得更好的理解。在确保您理解了指针的逻辑之后,还要检查post


注:这是一个自学问题。尽量避免被否决。

提示:
grade
char
而不是
char[]
scanf(“%s”和&grade)-->
scanf(“%c”和等级)实际
scanf(“%c”、&grade)
来处理
名称
留下的
'\n'
。这就是您使用
-Wall-Wextra
编译的原因谢谢,我以前忘记了%s留下的\n,我的意思是
scanf(“%c”,&grade)。将对其进行编辑和修复。现在,这将使grade的输入不会被跳过!为了使它成为一个真正有用的答案,您可以解释
%s“
发生了什么,并将
'\n'
留在
stdin
中,不读
%c”
'\n'
将作为
等级的输入,现在我似乎表现出一个问题,它在我回答之前就退出了程序。这样输入你的成绩:你的成绩是
scanf ("%s",grade);