Что вы делаете здесь:
nama[count]={" "};
nim[count]={" "};
ip[count]={" "};
Не действительный код C, потому что вы не можете явно присвоить массив в голец. В C вы не можете удалить из массива в том смысле, что он не будет существовать в памяти, но вы можете назначить nul-терминатор для предотвращения дальнейшего чтения кода после достижения последнего элемента.
Также вы никогда не инициализируете count
, который вы можете заменить функцией strlen
и вычесть один из них, чтобы получить последний индекс в вашем массиве. Так что попробуйте:
nama[strlen(name)-1][strlen(name[0])-1][0]='\0';
nim[strlen(nim)-1][strlen(nim[0])-1][0]='\0';
for(int i = 0; i < sizeof(ip)/sizeof(ip[0]), ip[i] != 0.0f; i++); // count the elements until you reach a value of 0.0f (this won't work if you have any values with 0.0f in your array)
if(i>=sizeof(ip)/sizeof(ip[0]) i--;
ip[i]=0.0f;
Предполагая внешнюю большую размерность для nama
и nim
такие же, и внутреннюю большую размерность (единственный один) для ip
такой же длины, вы можете просто установить счетчик на strlen(name[strlen(name)-1])-1
, а затем сделать:
count = strlen(name[strlen(name)-1])-1;
nama[strlen(name)-1][count]='\0';
nim[strlen(nim)-1][count]='\0';
if(ip[0]!=0.0f) ip[count]=0.0f;
вы также можете упростить, добавив еще одну переменную inner_count
, потому что вы не хотите назвать более strlen(name)-1
, чем один раз. Таким образом, в предположении, что name
и nim
всегда будут иметь одинаковую длину как в внутреннем, так и в внешнем измерениях, а ip
будет иметь ту же длину, что и внешний размер, вы можете это сделать.
inner_count = strlen(name)-1;
count = strlen(name[inner_count])-1;
nama[inner_count][count]='\0';
nim[inner_count][count]='\0';
if(inner_count==50) ip[count]=0.0f; // this assumes all arrays have length of 50.
Кроме того, что вы должны понять, что вы не можете назначить NUL терминатор к вашему ip
массива и не может использовать sizeof
для определения длины. Вы можете предположить, что она равна той же длине, что и массив других в вашем случае, или получить длину путем подсчета до тех пор, пока вы не достигнете значения, равного 0.0f;
'while (input! = 'Y' || input! = 'N');' должно быть 'input! = 'Y' && input! = 'N'' иначе, как только вы вводите допустимый ввод (например, 'N') цикл с остановкой, потому что' 'N '! =' Y'' вернет' true', и поскольку это 'OR', цикл снова запустится. – Arc676
Уже попробуйте «\ 0», но все равно не могу. –
Должно ли это 'while (input! = 'Y' || input! = 'N');' be 'while (input! = 'Y' && input! = 'N');'? – alk