我是C语言的新手,我正在尝试从用户那里读取一个字符和一个字符串(一个句子;最大长度为25).
不知道我在下面的代码行中做错了什么,它给了我一个错误"Segment Fault".
#include <stdio.h>
int main(){
char * str[25];
char car;
printf("Enter a character: ");
car = getchar();
printf("Enter a sentence: ");
scanf("%[^\n]s", &str);
printf("\nThe sentence is %s, and the character is %s\n", str, car);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Spi*_*rix 10
您必须进行四项更改:
更改
char * str[25];
Run Code Online (Sandbox Code Playgroud)
至
char str[25];
Run Code Online (Sandbox Code Playgroud)
因为你想要一个25 char秒的数组,而不是25个指针的数组char.
更改
char car;
Run Code Online (Sandbox Code Playgroud)
至
int car;
Run Code Online (Sandbox Code Playgroud)
作为getchar()返回int,而不是char.
更改
scanf("%[^\n]s", &str);
Run Code Online (Sandbox Code Playgroud)
至
scanf( "%24[^\n]", str);
Run Code Online (Sandbox Code Playgroud)
告诉scanf我们
'\0')或直到a \n并存储它str.更改
printf("\nThe sentence is %s, and the character is %s\n", str, car);
Run Code Online (Sandbox Code Playgroud)
至
printf("\nThe sentence is %s, and the character is %c\n", str, car);
Run Code Online (Sandbox Code Playgroud)
为正确的格式说明的char就是%c,没有%s.
str是一个包含25个指针char的数组,而不是数组char.所以将其声明改为
char str[25];
Run Code Online (Sandbox Code Playgroud)
并且你不能scanf用来读句子 - 它在第一个空格处停止阅读,所以fgets用来读取句子.
在你的最后printf,你需要说明%c符来打印字符,而不是%s.您还需要刷新标准输入,因为还有'\n'剩余的stdin,所以您需要抛出这些字符.
修订后的计划现在
#include <stdio.h>
void flush();
int main()
{
char str[25], car;
printf("Enter a character\n");
car = getchar();
flush();
printf("Enter a sentence\n");
fgets(str, 25, stdin);
printf("\nThe sentence is %s, and the character is %c\n", str, car);
return 0;
}
void flush()
{
int c;
while ((c = getchar()) != '\n' && c != EOF)
;
}
Run Code Online (Sandbox Code Playgroud)