Nick_is_asking Ответов: 2

Проблема с входной строкой языка Си


Привет всем!!!

Я пытаюсь дать строку в качестве входных данных, используя C.

Когда я даю , например, "Hello world" в качестве входных данных, я получаю "Hello" только без "World".Почему это происходит и как я могу решить эту проблему???

Что я уже пробовал:

int main(void)
{   
    char *A = "Player_1";
    char *B = "Player_2";
    char *word_A = malloc(sizeof(char) * 50);
    char *word_B = malloc(sizeof(char) * 50);
    word_A = get_word(A,B);
    printf("Word_A => %s\n" , word_A);
    word_B = get_word(B,A);
    printf("Word_B => %s\n" , word_B);
}



char *get_word(char *player_A , char *player_B)
{
    char *word = malloc(50);
    printf("%s give a word without %s looking at it: " , player_A , player_B);
    scanf("%s" , word);
    return word;
}


Я также попробовал scanf("%[^\n]" , word); ,но тогда я не могу ввести данные во второй раз, и программа завершается.Что я могу сделать???

Спасибо...

2 Ответов

Рейтинг:
6

OriginalGriff

Как только я немного прибрался и исправил ошибки (применяемые современным компилятором), он отлично работает:

#include <iostream>
char *get_word(const char *player_A , const char *player_B);
int main(void)
    {   
    const char *A = "Player_1";
    const char *B = "Player_2";
    char *word_A;
    char *word_B;
    word_A = get_word(A,B);
    printf("Word_A => %s\n" , word_A);
    word_B = get_word(B,A);
    printf("Word_B => %s\n" , word_B);
    }



char *get_word(const char *player_A , const char *player_B)
    {
    char *word = (char*) malloc(50);
    printf("%s give a word without %s looking at it: " , player_A , player_B);
    scanf("%s" , word);
    return word;
    }

Вещь, чтобы отметить, что scanf завершает ввод на пробелах, а не только на новой строке: Библиотечная функция C - scanf() - Tutorialspoint[^] - таким образом, "hello world" будет читаться как два входа: "hello" и "world".
Если вы хотите прочитать всю строку, вам нужно будет использовать Библиотечная функция C - fgets() - Tutorialspoint[^] вместо.