公平的警告,我对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;
}
问题出在"等级"部分,其他方面都很好。带有用户输入的程序输出为
Enter your age: 3
You are 3 years old
Enter your GPA: 4.5
You're GPA is 4.500000
Please enter your name: Test
Your name is Test
Enter your grade: B
Segmentation fault (core dumped)
希望这里有人能帮忙。祝你一切顺利!
用于获得等级输入的输入将是
scanf(" %c",&grade);
之所以出现此问题,是因为等级是一个char变量,而不是char
数组。
char
->%c
char
数组(又称C中的字符串(->%s
获得segmentation fault
的原因是您将输入B
扫描为字符串而不是字符(它等效于{'B',' '}
,因此它不仅仅是B
(,并且您正试图将此字符串分配给char
。
如果你想得到一个字符作为输入(看起来你想要这样(,你必须做:
scanf ("%c",&grade);
%c
格式说明符用于扫描char
s,而&grade
基本上是等级的地址。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////然而,如果你想得到一个字符串作为输入(即C中的字符数组(,你必须这样定义等级:
char grade [n];
(n
是表示阵列大小的数字(
并且scanf
行必须是:
scanf ("%s",grade);
%s
格式说明符用于获取string
s(即C中的字符数组(。我们之所以使用不带地址为(&
(运算符的grade
,与指针有关。因为CCD_ 21已经是一个指针;我们需要它的值(即数组第一个字符的地址(,而不是地址。请查看此链接以更好地理解。在确保你已经理解了指针的逻辑之后,也可以查看这篇文章。
注:这是一个自学问题。尽可能避免被否决。