2015-11-12 2 views
-4

Мне нужна простая функция, которая может читать несколько слов в строке в C, вроде как Scanner.nextLine() в Java или Console.ReadLine() в C#, но я не могу найти простой способ в любом месте, Я пробовал всевозможные вещи, но никто из них, похоже, работает в 100% случаев.scanf() несколько слов в C

+6

'fgets()' предоставит ваши пожелания. – Haris

ответ

0

Это удаляет «\ п» символ, который включен в строки, возвращаемой fgets, что делает функцию практически эквивалентно функций, присутствующих в популярных управляемых языках:

//gets a line from the specified stream 
int getline(char* charArray, int maxLength, FILE* stream) { 
    int i; 
    if (fgets(charArray, maxLength, stream) == NULL) 
     return 1; //some error occurred 
    for (i = 0; i < maxLength; i++) { 
     if (charArray[i] == '\n') { 
      if (i != 0 && charArray[i - 1] == '\r') //cater for windows line endings 
       i--; 
      charArray[i] = '\0'; 
      return 0; //all's well that ends well 
     } else if (charArray[i] == '\0') 
      return 0; //smooth sailing fam 
    } 
    return 2; //there was no string terminator 
} 
+0

Исправлена ​​какая-то логистика, каковы реакции на фиксированную версию? –

+0

Я бы рекомендовал заменить 'for'-loop на' strchr() '. – EOF

-2

Здесь вы идете:

#include "stdio.h" 

//gets a line from the specified stream 
int getline(char* charArray, int maxLength, FILE* stream) { 
    int i; 
    if (fgets(charArray, maxLength, stream) == NULL) 
     return 1; //some error occurred 
    for (i = 0; i < maxLength; i++) { 
     if (charArray[i] == '\n') { 
      if (i != 0 && charArray[i - 1] == '\r') //cater for windows line endings 
       i--; 
      charArray[i] = '\0'; 
      return 0; //all's well that ends well 
     } else if (charArray[i] == '\0') 
      return 0; //smooth sailing fam 
    } 
    return 2; //there was no string terminator 
} 

int main() { 
    char money[4]; 
    printf("How much money do you have on you? "); 
    getline(money, 4, stdin); 
    printf("Oh really? $%d? Good. :)\n", atoi(money)); 
    char string[4]; 
    printf("Where is our next lesson?\n"); 
    getline(string, 4, stdin); 
    printf("%s", string); 
    return 0; 
} 
+2

В чем именно смысл этого? – Haris

+1

Что ты думаешь? –

3

Вы можете использовать fgets

char *fgets(char *str, int n, FILE *stream) 

Имейте в виду, что fgets читает, пока не достигнет размера п, или символ новой строки или EOF. Это сделано для предотвращения переполнения буфера, поэтому вам нужно убедиться, что ваш буфер достаточно велик, чтобы сохранить строку.

+0

Спасибо, fgets (charArray, length, stdin) работал красиво. :) –

0

scanf является то, что вы хотите:

#include <stdio.h> 

int main(void) 
{ 
    char string[50]; 
    scanf(" %49[^\n]s",string); 

    printf("you entered: %s\n",string); 
} 
0

Вы можете следить за этим:

char str[100];// as length of the total words neded 
    fgets(str,100,stdin) 

     printf("output: %s",str); 

    return 0; 
+0

Начиная с C11, 'gets()' больше не является стандартной библиотечной функцией C. – chux

+0

Хотя этот код может ответить на вопрос, было бы лучше объяснить, как он решает проблему, не вводя других и почему ее использовать. Ответы только на код не полезны в долгосрочной перспективе. – JAL

Смежные вопросы