Много не так с вашим кодом.Во-первых, вы не инициализируете j
каким-либо значением.И каждый раз, когда вы читаете строку текста, вы не сбрасываете ее на 0. Или фактически никогда не меняете значение.
Вы не проверяете, что n
равно 10 или меньше.И вы также оставляете \n
во входном буфере, так что первая строка текста, которую вы читаете, не соответствует вашим ожиданиям.Было бы лучше использовать fgets
для чтения всей строки, а затем использовать sscanf
для извлечения числа.
Этот цикл считывает слишком много строк ... что может быть способомвокруг вас, не очищая ввод перед чтением в строках, но не решает проблему.
for(i=0;i<=n;i++)
И тогда у вас есть эта строка, и она соответствует нечетным числам ...
for(k=0;k<strlen(ch[j]);k+=2)
j
по-прежнему указывает на какое-то неопределенное значение.Но вы не должны использовать j
, вы должны использовать i
.
for(k=0;k<strlen(ch[i]);k+=2)
И затем внутри цикла вы вообще не используете k
, так что это довольно бессмысленно.Также использование strlen()
как это означает, что для времени вокруг цикла он пересчитывает длину строки.
После того, как все различные ошибки исправлены, ваш код будет выглядеть следующим образом ...
#include <stdio.h>
#include <string.h>
int main() {
int n,i,j;
char ch[10][10000];
fgets(ch[0],10000,stdin);
sscanf(ch[0],"%d",&n);
if((n>10)||(n<1)) {
printf("Invalid number\n");
return 0;
}
for(i=0;i<n;i++) {
fgets(ch[i],10000,stdin);
if(strchr(ch[i],'\n')) {
*(strchr(ch[i],'\n'))='\0';
}
}
for(i=0;i<n;i++) {
for(j=0;j<strlen(ch[i]);j+=2) {
printf("%c",ch[i][j]);
}
printf(" ");
for(j=1;j<strlen(ch[i]);j+=2) {
printf("%c",ch[i][j]);
}
printf("\n");
}
return 0;
}