с
char trains[N][M];
значение printf в
for(i=0;i<M;i++)
{
printf("%s\n", trains[n][i]);
}
недопустимо, поскольку trains[n][i]
является символом, и вы печатаете его в виде строки (% s)
Вся форма, включая для , может быть заменена на
printf("%s\n", trains[n]);
В противном случае вы можете писать char символом char, но вам нужно остановиться, когда вы достигнете null char:
for(i=0; trains[n][i] != 0 ; i++)
{
printf("%c", trains[n][i]);
}
putchar('\n');
Вы открываете файл, но не пишете в
Вам необходимо проверить результат fopen , чтобы убедиться, что файл был открыт
Другая проблема в
scanf("%s", train);
strncpy(trains[n],train,M-1);
strncpy не копирует окончательный нулевой символ
Поскольку у вас есть
чередующихся символов [N] [M];char train [M];
Для использования промежуточного поезд бесполезен и не предлагает защищенного (его размер, если не длиннее trains[x]
)
Вам нужночтобы проверить возвращаемое значение scanf и прочитать до 19 символов (M - 1), вы можете сделать это:
if (scanf("%19s", trains[n]) != 1)
break;
У вас нет гарантии, что вы прочитали 7 поездовпоэтому вы должны изменить цикл после:
for (i = 0; i != n; ++i)
printf("%s\n", trains[n]);
Вы также можете использовать ставит в этом случае
И если вы хотите также писать в открытом файле
for (i = 0; i != n; ++i) {
fprintf(sp, "%s\n", trains[n]);
puts(trains[n]);
}
Наконец, ваша программа может быть
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 7
#define M 20
int main()
{
FILE * fp=fopen("Lines.txt","w");
if (fp == 0) {
puts("cannot open Lines.txt");
return -1;
}
int i,n;
char trains[N][M];
for(n = 0; n<N; n++)
{
if (scanf("%19s", trains[n]) != 1)
break;
}
for(i = 0; i != n; ++i)
{
fprintf(fp, "%s\n", trains[i]);
/*puts(trains[i]);*/
}
fclose(fp);
return 0;
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -g -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
train1
train2
train3
train4
train5
train6
train7
pi@raspberrypi:/tmp $ cat Lines.txt
train1
train2
train3
train4
train5
train6
train7
pi@raspberrypi:/tmp $
Обратите внимание, если название поезда содержит более 19 символовбудет вырезано, пример:
pi@raspberrypi:/tmp $ ./a.out
train1
verylongnameofatrain
train3
train4
train5
train6
pi@raspberrypi:/tmp $ cat Lines.txt
train1
verylongnameofatrai
n
train3
train4
train5
train6
pi@raspberrypi:/tmp $