使用scanf读取输入的字符串

9

我是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个回答

13
你需要进行四个更改:
  1. 更改

    char * str[25];
    

    char str[25];
    

    你希望得到一个包含25个char的数组,而不是包含25个指向char的指针的数组。

  2. 修改

  3. char car;
    

    int car;
    

    由于 getchar() 返回的是 int 而不是 char

  4. 更改为

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

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

    告诉scanf要:

    1. 忽略所有的空白字符(如果有的话)。
    2. 最多扫描24个字符(加上一个Nul终止符'\0'),或直到出现\n,并将其存储在str中。
  6. 修改为

    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


10

str是一个指向char类型的25个指针的数组,而不是一个char类型的数组。所以需要将其声明更改为:

char str[25];

在读取句子时,您不能使用scanf -- 它会在第一个空格处停止读取,因此请使用fgets来代替读取句子。

在您最后的printf中,您需要使用%c 标识符打印字符,而不是%s。 您还需要刷新标准输入,因为在stdin中仍有一个'\n',所以您需要将这些字符丢弃。

修改后的程序如下:

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

谢谢你的回答。我复制并粘贴了你的代码,但它在不让我输入句子的情况下终止了程序。因此,在我输入一个字符并按下回车键之后,在要求输入句子之前,它就被终止了。 - Hafiz Temuri
你需要清空标准输入(不要使用 fflush(stdin))。 - lost_in_the_source
“你不能使用 scanf 读取句子——它会在第一个空格处停止读取。” 实际上,这是可能的(通过使用 %[ 格式说明符)。scanf 中的 %s 会在第一个空格处停止读取。顺便说一下,fgets 将读取程序中 getchar() 遗漏的 \n - Spikatrix
我没有使用fflush(stdin),事实上,我甚至不知道那是什么lol,因为我是c语言的新手。我想这可能是我写的第三或第四个c程序了。 - Hafiz Temuri

0

// 这是使您的代码工作的最小更改

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

你为什么要回答旧问题?有什么不同于现有的答案吗? - Nothing special

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接