处理字符时出现分段错误

  • 本文关键字:分段 错误 字符 处理 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;
}

问题出在"等级"部分,其他方面都很好。带有用户输入的程序输出为

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格式说明符用于扫描chars,而&grade基本上是等级的地址。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////然而,如果你想得到一个字符串作为输入(即C中的字符数组(,你必须这样定义等级:

char grade [n];

(n是表示阵列大小的数字(

并且scanf行必须是:

scanf ("%s",grade);

%s格式说明符用于获取strings(即C中的字符数组(。我们之所以使用不带地址为(&(运算符的grade,与指针有关。因为CCD_ 21已经是一个指针;我们需要它的值(即数组第一个字符的地址(,而不是地址。请查看此链接以更好地理解。在确保你已经理解了指针的逻辑之后,也可以查看这篇文章。

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

最新更新