2017-01-13 3 views
2

Я хочу читать строки и записывать их как полные строки в файл, но я не могу читать больше слов в буфер как полную строку.Язык C - печать некоторых предложений в файл

Текущий проблематичной код:

printf("\nEnter how many sentences do you want to read: "); 
    scanf("%d", &n); 
    tab = (char**)malloc(n * sizeof(char*)); 
     for (int i = 0; i < n; i++) { 
      printf("\nEnter sentence: "); 
      scanf("%s", val); 
      tab[i] = _strdup(val); 
     } 
     for (i = 0; i < n; i++) 
      fprintf(f, "%s ", tab[i]); 
     free(tab); 

Ранее я попытался это:(проблема это только присваивает одну строку)

printf("\nEnter how many sentences do you want to read: "); 
    scanf("%d", &n); 
    for (i = 0; i < n; i++) { 
     printf("\nEnter sentence: "); 
     scanf("%s", val); 
     fprintf(f, "\%s ", val); 
    } 

Почти там, теперь я есть предложения, но я получил одну пустую строку в качестве первой строки файла.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
#include <malloc.h> 
#include <string> 
#define SIZE 30 

void creare(char t[30]); 

void main(void) 
{ 
    FILE* f2; 
    char name[30]; 
    printf("\nEnter name of file to work with: "); 
    scanf("%s", name); 
    creare(name); 
    f2 = fopen(name, "r"); 
    if (f2 == NULL) 
    { 
     printf("\nOpen error!!"); 
     exit(0); 
    } 
    fclose(f2); 
    printf("\n"); 
    _getch(); 
} 


void creare(char t[30]) 
{ 
    FILE* f; 
    int n,i; 
    char val[30]; 
    f = fopen(t, "w"); 
    if (f == NULL) 
    { 
     printf("\nOpen error!!"); 
     exit(0); 
    } 
    printf("\nEnter how many sentences do you want to read: "); 
    scanf("%d", &n); 
    for (i = 0; i <= n; i++) 
    { 
     fgets(val, sizeof(val), stdin); 
     fprintf(f, "% s", val); 
    } 
    fclose(f); 
} 
+1

Добро пожаловать в переполнение стека! [Пожалуйста, ознакомьтесь с этим обсуждением, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (Http://stackoverflow.com/q/605845/2173917). –

+1

Как насчет чтения [ask] и предоставления [mcve]? – Olaf

+2

Что такое 'val' и как оно распределено? – UnholySheep

ответ

2

Я использовал fgets (val, sizeof val, stdin), чтобы прочитать строку, потому что читать строку с пробелами. Причина, по которой эта пустая строка входит в файл, связана с тем, что вы читаете «\ n», который вводится после scanf («% d», & n); нажатие клавиши «\ n» будет считано в val для в первый раз, поэтому он просто печатает это «\ n» в файл.

Чтобы прочитать, что «\ n» используйте символ, чтобы прочитать это «\ n». Ниже приведена полная программа.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 
#include <string.h> 
#define SIZE 30 

void creare(char t[30]); 

int main(void) 
{ 
    FILE* f2; 
    char name[30]; 
    printf("\nEnter name of file to work with: "); 
    scanf("%s", name); 
    creare(name); 
    f2 = fopen(name, "r"); 
    if (f2 == NULL) 
    { 
     printf("\nOpen error!!"); 
     exit(0); 
    } 
    fclose(f2); 
    printf("\n"); 
} 


void creare(char t[30]) 
{ 
    FILE* f; 
    int n,i; 
    char val[30],g; 
    f = fopen(t, "w"); 
    if (f == NULL) 
    { 
     printf("\nOpen error!!"); 
     exit(0); 
    } 
    printf("\nEnter how many sentences do you want to read: "); 
    scanf("%d", &n); 
    scanf("%c",&g); 
    for (i = 0; i <n; i++) 
    { 
     fgets(val, sizeof(val), stdin); 
     fprintf(f, "%s", val); 
    } 
    fclose(f); 
} 
Смежные вопросы