Если ваш скрипт успешно работал в течение нескольких часов, я думаю, что это может быть одним из параметров конфигурации вашей базы данных, просмотрите вашу конфигурацию с этим предложением,
SHOW GLOBAL VARIABLES where variable_name like'%time%';
Может быть, это много соединений или, может быть, тайм-аут сеанс, но я уверен, что это проблема вашего сервера MySQL
Это работало бы на числа> = 0
#include <math.h>
char * convertNumberIntoArray(unsigned int number) {
int length = (int)floor(log10((float)number)) + 1;
char * arr = new char[length];
int i = 0;
do {
arr[i] = number % 10;
number /= 10;
i++;
} while (number != 0);
return arr;
}
Править: Просто немного больше стиля C, но более загадочный.
#include <math.h>
char * convertNumberIntoArray(unsigned int number) {
unsigned int length = (int)(log10((float)number)) + 1;
char * arr = (char *) malloc(length * sizeof(char)), * curr = arr;
do {
*curr++ = number % 10;
number /= 10;
} while (number != 0);
return arr;
}
Выяснение количества цифр хитро, но принятие это всегда - 4 цифры, которые можно сделать:
for (i = 0; i < 4; i++) {
numberArray[i] = number%10;
number = number div 10;
}
Подсказка: Смотрите на этот более ранний вопрос "Сумма цифр в C#". Это объясняет, как извлечь цифры в числе с помощью нескольких методов, некоторые релевантные в C.
/* count number of digits */
int c = 0; /* digit position */
int n = number;
while (n != 0)
{
n /= 10;
c++;
}
int numberArray[c];
c = 0;
n = number;
/* extract each digit */
while (n != 0)
{
numberArray[c] = n % 10;
n /= 10;
c++;
}
Вы могли вычислить количество цифр в целом числе с логарифмом, а не циклом. Таким образом,
int * toArray(int number)
{
int n = log10(number) + 1;
int i;
int *numberArray = calloc(n, sizeof(int));
for ( i = 0; i < n; ++i, number /= 10 )
{
numberArray[i] = number % 10;
}
return numberArray;
}
Если необходимо принять отрицательные числа во внимание, Вам, возможно, понадобилась бы некоторая дополнительная логика. На самом деле при проигрывании вокруг с массивами Вы не знаете размера первичных, можно хотеть сделать еще некоторую проверку безопасности и добавление, что API для обработки структуры данных довольно удобен также.
// returns the number of digits converted
// stores the digits in reverse order (smalles digit first)
// precondition: outputdigits is big enough to store all digits.
//
int convert( int number, int* outputdigits, int* signdigit ) {
int* workingdigits = outputdigits;
int sign = 1;
if( number < 0 ) { *signdigit = -1; number *= -1; }
++workingdigits;
for ( ; number > 0; ++ workingdigits ) {
*workingdigits = number % 10;
number = number / 10;
}
return workingdigits - outputdigits;
}
void printdigits( int* digits, int size, int signdigit ) {
if( signdigit < 0 ) printf( "-" );
for( int* digit = digits+size-1; digit >= digits; --digit ){
printf( "%d", *digit );
}
}
int main() {
int digits[10];
int signdigit;
printdigits( digits, convert( 10, digits, &signdigit ), signdigit );
printdigits( digits, convert( -10, digits, &signdigit ), signdigit );
printdigits( digits, convert( 1005, digits, &signdigit ), signdigit );
}
C код:
/* one decimal digit takes a few more than 3 bits. (2^3=8, 2^4=16) */
int digits[(sizeof (int) * CHAR_BIT) / 3 + 1],
*digitsp = digits;
do {
*digitsp++ = number % 10;
number /= 10;
} while(number > 0);
Вы будете видеть сколько цифр Вы преобразованный путем взятия различия
digitsp - digits
Если Вы хотите поместить его в функцию:
#define MIN_DIGITS_IN_INT ((sizeof (int) * CHAR_BIT) / 3 + 1)
int to_array(int number, int *digits) {
int *digitsp = digits;
do {
*digitsp++ = number % 10;
number /= 10;
} while(number > 0);
return digitsp - digits;
}
int main() {
int number = rand();
int digits[MIN_DIGITS_IN_INT];
int n = to_array(number, digits);
/* test whether we're right */
while(n-- > 0)
printf("%d", digits[n]);
}
printf(" = %d\n", number);
}
Я предпочитаю автоматические массивы динамическому выделению памяти в этом случае, так как легче сделать его правильно и не протечь случайно.
с помощью кода vadim я придумал эту тестовую программу:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char * convertNumberIntoArray(unsigned int number) {
unsigned int length = (int)(log10((float)number)) + 1;
char * arr = (char *) malloc(length * sizeof(char)), * curr = arr;
do {
*curr++ = number % 10;
number /= 10;
} while (number != 0);
return arr;
}
int main(void)
{
int InputNumber;
int arr[5];
printf("enter number: \n");
scanf("%d", &InputNumber);
convertNumberIntoArray(InputNumber);
printf("The number components are: %d %d %d\n", arr[0],arr[1],arr[2]);
system("PAUSE");
return 0;
}
но вывод является мусором. Кто-либо может советовать, если я сделал что-то глупое здесь?
/***** output *****/
enter number:
501
The number components are: 2009291924 2009145456 -1
Press any key to continue . . .
- dave