У меня проблема с чтением пустой строки в C. Я хочу прочитать строку из следующего -
- жопа
- мяч
- (пусто)
- кошка
но когда я использую gets()
, он не обрабатывает (empty)
как строку [2]. Он читает «кошка» как строку [2]. Так как я могу решить эту проблему?
char str1[15002][12];
char str2[15002][12];
char s[25];
map<string,int> Map;
int main()
{
int ncase, i, j, n1, n2, count, Case;
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d",&ncase);
Case = 1;
while(ncase > 0)
{
Map.clear();
//this is the necessery part
scanf("%d %d\n",&n1,&n2);
count = 0;
printf("n1=%d n2=%d\n",n1,n2);
for(i = 0; i < n1; i++)
{
gets(str1[i]);
}
for(i = 0; i < n2; i++)
{
gets(str2[i]);
}
//end of reading input
for(i = 0; i < n1; i++)
{
for(j = 0; j < n2; j++)
{
strcpy(s,str1[i]);
strcat(s,str2[j]);
if(Map[s] == 0){
count += 1;
Map[s] = 1;
}
}
}
printf("Case %d: %d\n", Case, count);
Case++;
ncase--;
}
return 0;
}
и ввод может выглядеть как
Я дал код здесь. Ввод может быть как
line1>1
line2>3 3
line3>(empty line)
line4>a
line5>b
line6>c
line7>(empty)
line8>b
И я ожидаю
str1[0]=(empty).
str1[1]=a;
str1[2]=b;
и
str2[0]=c;
str2[1]=(empty);
str2[2]=b;
ОК, наконец-то я нашел проблему. Это линия
printf("n1=%d n2=%d\n",n1,n2);
, что создает проблему при получении ввода gets()
. Вместо новой строки с целым числом n1
, n2
, я беру новую строку как ("%c",&ch
), и тогда все в порядке.
Спасибо всем, кто мне ответил.