簡體   English   中英

使用 scanf 讀取字符串作為輸入

[英]Read a string as an input using scanf

我是 C 語言的新手,我正在嘗試從用戶那里讀取一個字符和一個字符串(一個句子;最大長度 25)。

不確定我在以下代碼行中做錯了什么,它給了我一個錯誤“段錯誤”。

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

謝謝!

您必須進行四項更改:

  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 終止符'\\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

str是一個包含 25 個指向char指針的數組,而不是一個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)
        ;
}

// 這是對您的代碼進行的最小更改以使其正常工作

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM