Как передать значения из целочисленного массива в строковый массив с пробелами в C - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть int array и мой массив char:

int arr[5] = { 0, 1, 2, 3, 4};
char str[80];

Итак, я пытаюсь передать значения int array в мои char array с пробелами, потому что яЯ вставлю эти значения в FILE.

Итак, мой char array должен быть таким: 0 1 2 3 4 5 (с пробелами).

Как я могу это сделать?

Я могу передать значения int своему char array, но без пробелов.Это мой код:

FILE *myFile;
char str[80],c;
int vet[5] = { 0, 1, 2, 3, 4};
int i;

for(i=0; i<10; i++){
    str[i] = vet[i]+'0';
    str[i+1] = " "; //blank space
}

printf("%s", str);

if(!(myFile = fopen("file.txt","w"))){
  printf("Error!\n");
  exit(1);
}

fprintf(myFile, str);
fclose(myFile);

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

str[i] = vet[i]+'0' Это очень хакерский способ сделать это и будет работать ТОЛЬКО для чисел 0-9.Вот почему, если вы еще не знаете:

Числа 0-9 получили десятичные значения, ну, очевидно, 0-9.Вот десятичные значения для символов ASCII для 0-9

'0' = 48
'1' = 49
'2' = 50
'3' = 51
'4' = 52
'5' = 53
'6' = 54
'7' = 55
'8' = 56
'9' = 57

Итак, поместив, например, 4 +'0' в массив char, вы фактически добавляете 52. Форматирование %s - это то, что заставляет printf интерпретировать этокак код ASCII вместо целого числа.Вы можете попытаться сделать str[0] = 52;, и это все равно будет печатать символ 4 в качестве первого символа в строке, если используется с %s

Теперь, если вы сделаете 10 + '0', вы добавите 58, что являетсяКод ASCII для :

Чтобы обойти это, вы можете использовать функцию sprintf(). Она может печатать число в виде строки в предоставленный буфер.Помните, что 10 не существует как один символ, а является строкой, содержащей 1 и 0. Пример кода:

FILE *myFile;

char str[80];
char *p = str;

int vet[5] = {0, 1, 2, 3, 4};
int i;

for(i=0; i<5; i++){
    //Take the number at vet[i] and print it as a string to the buffer.
    //The pointer is increased by the amount of characters written
    p = sprintf(p, "%d ", vet[i]);
}

//Remove trailing space
str[strlen(str) - 1] = '\0';

printf("%s", str);

if(!(myFile = fopen("file.txt","w"))){
    printf("Error!\n");
    exit(1);
}

fprintf(myFile, str);
fclose(myFile);

Это должно работать для любого числа в массиве vet

0 голосов
/ 26 сентября 2018

Вы перезаписываете ' ' следующим номером, а str[i+1] = " "; неверно, вам нужно использовать одинарные кавычки ' '.Как только вы закончите копирование null \0, завершите строку, как показано ниже.

int i = 0;
for(i=0; i<5; i++){
    str[2*i] = vet[i]+'0';
    str[2*i+1] = ' '; //blank space
}
str[2*i-1] = '\0'; // Append \0 char here.
printf("%s", str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...