Questo succede perché stai tentando di stampare un array di int come fosse un array di char.
Alla prima lettura c vale '1', ma siccome assegni s[0]='1', ed s[0] è un intero, i restanti byte dell' intero (il cui numero dipende dalla macchina) rimangono settati a zero.
Ecco che viene stampato solo il primo carattere perché il byte successivo al carattere in cui è stato scritto '1' è uguale a zero, e viene interpretato come un terminatore.
Quello che devi fare è cambiare la dichiarazione in un array di char, oltre ad aumentarne la dimensione a 16 per contenere il terminatore:
codice:
#include <stdio.h>
#include <string.h>
int main (void) {
FILE *f;
f=fopen("ciao.txt", "r");
char s1[16]={0};
int i;
int c;
for (i=0; i<15; i++){
c=fgetc(f);
s1[i]=c;}
printf ("la stringa is %s", s1);
int x=0;
int k=0;
fclose(f);
return 0;