Каква е разликата?

12 отговора 0 прегледа
#1

Каква е разликата?

Моят син се учи да пише програмки.
Каква е разликата между тези две:

#include<iostream>
#include<string.h>
using namespace std;
int main ()
{
char niz[100];
int i;
char a[100];
strcpy(a,"");
char n[1];
strcpy(n," ");
cin.getline(niz,100);
for(i=0;i<strlen(niz);i++)
{
if(niz!=' ')
{n[0]=niz;
strcat(a,n);
}
else {cout<<a<<endl; strcpy(a,"");}

}
cout<<a<<endl;


system("pause");
return 0;
}

и тази:

#include<iostream>
#include<string.h>
using namespace std;
int main ()
{
char niz[100];
int i;
char a[100];
strcpy(a,"");
char n[2];
strcpy(n," ");
cin.getline(niz,100);
for(i=0;i<strlen(niz);i++)
{
if(niz!=' ')
{n[0]=niz;
strcat(a,n);
}
else {cout<<a<<endl; strcpy(a,"");}

}
cout<<a<<endl;


system("pause");
return 0;
}

Разликата е, че първата работи, а втората - не.
Някой може ли да ми обясни защо?
Използван е Dev C++

Редактирано от БM21 на

Отговор
в отговор на БM21 #2

Re: Каква е разликата?

Странна работа!

Отговор
в отговор на БM21 #3

Re: Каква е разликата?

Черна магия!
Не знам защо не се вижда .
Оригиналният текст е if (niz!=' ') и n[0]=niz
В поста обаче липсва
Най-интересното е, че като го отворя за редактиране се вижда нормално

М-да, пак не се вижда


След niz и на двете места трябва да има средна скоба, след това i и затваряща скоба.

Редактирано от БM21 на

Отговор
в отговор на БM21 #4

Re: Каква е разликата?

Пробвай със pre тагове, {pre} преди кода и {/pre} след кода - смени {} със [].
Пример (запазва празните места):

3 места
2 места...

Без Пре тагове:
3 места
2 места...



Редактирано от naki на

Отговор
в отговор на БM21 #5

Re: Каква е разликата?

На кои редове е това? Я качи файловете в Tranz.it и дай линк, тука или на лична бележка.


Отговор
в отговор на naki #6

Re: Каква е разликата?

Ето линк с текста : [линк]

Отговор
в отговор на БM21 #7

Re: Каква е разликата?

подсказка - натисни бутона италик дето е под текстовото поле за съобщение




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на zaphod #8

Re: Каква е разликата?

Хубаво де. Опитах форматиране с {pre} и {/pre}, считай [] вместо {}, ама се тоя - нищо не се получава. Я да пробам тука
  


Е го - на. Вместо индекса - италик, няма нищо че съм сложил pre

По ми е интересно защо с низ с дължина 1 се дъни, а когато е с по-голяма дължина работи нормално.

Редактирано от БM21 на

Отговор
в отговор на БM21 #9

Re: Каква е разликата?

Защото единствения низ, който можеш да запишеш в 1 байт е празния низ.

The last good thing written in C was Franz Schubert's Symphony No. 9.
Отговор
в отговор на | #10

Re: Каква е разликата?

Благодаря!
Ама и аз съм една Червена шапчица
Вярно, че тези тъпи декларации на низове показват не реалния размер , а едно по-малко, а някакви настройки на средата са махнали range check и вместо да гърми - върши глупости при 1.

Отговор
в отговор на БM21 #11

Re: Каква е разликата?

range check в C++? Забавно.

The last good thing written in C was Franz Schubert's Symphony No. 9.
Отговор
в отговор на БM21 #12

Re: Каква е разликата?

статичните масиви нямат range check, това е в разрез със идеологията на езика




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на | #13

Re: Каква е разликата?

Ми аз съм си ламер с чувство за хумор

Отговор