使用scanf读取字符串作为输入

时间:2016-01-30 15:51:38

标签: c scanf

我是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;
}

谢谢!

3 个答案:

答案 0 :(得分:9)

您必须进行四项更改:

  1. 更改

    char * str[25];
    

    char str[25];
    

    因为你想要一个25个char的数组,而不是一个25个指向char的数组。

  2. 更改

    char car;
    

    int car;
    

    getchar()返回int,而不是char

  3. 更改

    scanf("%[^\n]s", &str);
    

    scanf( "%24[^\n]", str);
    

    告诉scanf

    1. 忽略所有空格字符(如果有)。
    2. 最多扫描24个字符(Nul-terminator '\0'为+1)或直至\n并将其存储在str
  4. 更改

    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;
}