我是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;
}
谢谢!
答案 0 :(得分:9)
您必须进行四项更改:
更改
char * str[25];
到
char str[25];
因为你想要一个25个char
的数组,而不是一个25个指向char
的数组。
更改
char car;
到
int car;
,getchar()
返回int
,而不是char
。
更改
scanf("%[^\n]s", &str);
到
scanf( "%24[^\n]", str);
告诉scanf
'\0'
为+1)或直至\n
并将其存储在str
。更改
printf("\nThe sentence is %s, and the character is %s\n", str, car);
到
printf("\nThe sentence is %s, and the character is %c\n", str, car);
作为char
的正确格式说明符是%c
,而不是%s
。
答案 1 :(得分:7)
str
是一个包含char
的25个指针的数组,而不是char
的数组。所以将其声明改为
char str[25];
你不能使用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)
;
}
答案 2 :(得分:-1)
//这是对您的代码的最小改动
#include <stdio.h>
int main(){
char car,str[25];
printf("Enter a character: ");
car = getchar();
printf("Enter a sentence: ");
scanf("%s", str);
printf("\nThe sentence is %s, and the character is %c\n", str, car);
return 0;
}