Вы нажали одну из многих проблем с scanf
.В этом случае scanf("%d %d", ...)
оставляет новую строку в буфере.Вы можете заставить его хлебать в конце пробела с пробелом в конце.
scanf("%d %d ", &number_of_strings , &length_of_string);
Тогда то, как вы читаете строку, сложно.Вы можете упростить это так:
int c, j;
for(j = 0; (c = getchar()) != '\n'; j++ ) {
s[i][j] = (char)c;
}
s[i][j] = '\0';
Или даже проще ...
for(int i=0 ; i<number_of_strings ; i++) {
scanf("%29s", s[i]);
}
И length_of_string
не требуется.На самом деле, это ответственность, так как вы выделили максимум 30 байт.Точно так же number_of_strings
может быть выше выделенного 20. Лучше читать, пока не будет исчерпан ввод или память.
#include <stdio.h>
const int MAX_STRINGS = 20;
const int MAX_LENGTH = 30;
int main(){
char s[MAX_STRINGS][MAX_LENGTH];
int num_strings;
for(num_strings = 0; num_strings < MAX_STRINGS ; num_strings++) {
if( scanf("%29s", s[num_strings]) < 1 ) {
break;
}
}
for( int i = 0 ; i < num_strings; i++){
printf("i= %d %s\n",i,s[i]);
}
return 0;
}