2016-12-05 1 views
0

je tente ma forme d'entrée programme C multiligne stdin avec saut de ligne avec ce codeentrée de chaîne multiligne de stdin dans c

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 
#include <limits.h> 
#include <math.h> 

#define DEFAULT_INPUT_LENGTH 20 

char * readMessage(FILE* file); 
void writeChar(char* string, char c); 


int main() 
{ 
    printf("Message:\n"); 
    char * msg = readMessage(stdin); 

    printf("Input: %s\n", msg); 


    free(msg); 


    return 0; 
}; 

char * readMessage(FILE* file) 
{ 
    char *input = malloc(DEFAULT_INPUT_LENGTH); 

    int inputCounter = 0; 
    int n = 1; 
    char c; 

    while(!feof(stdin)) 
    { 
     c=fgetc(file); 

     inputCounter++; 

     if (inputCounter == DEFAULT_INPUT_LENGTH * n) 
     { 
      n++; 
      int chars = DEFAULT_INPUT_LENGTH * n; 

      input = realloc(input, chars); 
     } 

     writeChar(input, c); 
    } 

    return input; 
} 




void writeChar(char* in, char c) 
{ 
    int i; 

    for(i = 0; ; i++) 
    { 
     if (in[i] == '\0') 
     { 
      in[i] = c; 
      break; 
     } 
    } 

} 

Mais lorsque je tente CTRL + D sur Linux ou CTRL + Z dans Windows le isnt d'entrée terminé.

Exemple de quelque chose comme d'entrée ceci:

asfer 
dfdfd 
sffdfl 

dans cet exemple si je tente ctrl + D après le dernier l ombles l'entrée isnt fini je dois utiliser entrer et CTRL + D

après dans la dernière nouvelle ligne indice de ligne CTRL + Z et ENTER et enter image description here

+0

1) Besoin de '* entrée = 0;' au début. 2) 'char c;' -> 'int c;' 3) 'while (! Feof (stdin)) { c = fgetc (fichier);' -> 'while ((c = fgetc (fichier))! = EOF) {'4)' dans [i] = c; '->' dans [i] = c; dans [i + 1] = 0; ' – BLUEPIXY

+0

j'essaie ces changements dans les fenêtres mais toujours CTRL + Z après dernier caractère non terminé entrée – mardon

+0

tapez seulement CTRL + Z avec entrer dans une ligne. N'entrez pas (CTRL + Z) les caractères suivants. – BLUEPIXY

Répondre

1

essayer cette

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define DEFAULT_INPUT_LENGTH 20 

char * readMessage(FILE* file); 
void writeChar(char* string, char c); 

int main(void){ 
    printf("Message:\n"); 
    char * msg = readMessage(stdin); 

    printf("Input: %s\n", msg); 

    free(msg); 

    return 0; 
} 

char * readMessage(FILE* file){ 
    char *input = malloc(DEFAULT_INPUT_LENGTH); 

    int inputCounter = 0; 
    int n = 1; 
    int c;//! 

    *input = 0;//! 

    while((c=fgetc(file)) != EOF){//! 
     inputCounter++; 

     if (inputCounter == DEFAULT_INPUT_LENGTH * n){ 
      n++; 
      int chars = DEFAULT_INPUT_LENGTH * n; 

      input = realloc(input, chars); 
     } 

     writeChar(input, c); 
    } 

    return input; 
} 

void writeChar(char* in, char c){ 
    int i; 

    for(i = 0; ; i++){ 
     if (in[i] == '\0'){ 
      in[i] = c; 
      in[i+1] = 0;//! 
      break; 
     } 
    } 

} 
+0

[DEMO] (http://ideone.com/I3vRLs) – BLUEPIXY