Я задавался вопросом, как я могу скопировать часть строки в другую, так что я проверил эту сеть, чтобы увидеть, если я мог бы получить ответ, и я сделал: How can I copy part of another string in C, given a starting and ending indexНе удается скопировать часть строки
Однако, когда я использую этот
strncpy(dest, src + beginIndex, endIndex - beginIndex);
на мой код, он не работает. Зачем? Я думаю, что я добавил индексы правильно.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define MAX 15
int main()
{
int j=0;
int i;
char RPNarray[MAX];
printf("Enter the RPN");
fgets(RPNarray,MAX,stdin);
int t=strlen(RPNarray);
double RPN[t][2];
for(i=0;i<=t;i++)
{
if(isspace(RPNarray[i]))
{
i=i+1;
}
else if (isdigit(RPNarray[i]))
{
int q,h;
q=i;
for (h=i;isdigit(RPNarray[h]);h++)
{
h=h+1;
}
int r;
double u;
r=h-q;
char number[r];
printf("%s ", RPNarray);
strncpy(number,RPNarray + q,h - q);
printf ("%s\n",number);
u=atof(number);
printf("%lf.\n",u);
RPN[j][0]=0;
RPN[j][1]=u;
i=i+1;
j=j+1;
}
}
int b;
for (b=0;b<=j;b++)
{
printf("%lf %lf \n",RPN[b][0],RPN[b][1]);
}
}
r
это количество цифр номера, q
позиции первой цифрой числа и ч первое положение после того, как число, которое не является числом.
Эта программа должна печатать матрицу RPN, как сказано в коде.
(0,(first number we introduce via stdin)
(0,(second number we introduce via stdin)
(0,(third number we introduce via stdin)
Я также добавил больше отпечатков, чтобы увидеть, где находится проблема, и как вы можете видеть, второй печать не выводится на печать, как это должно быть.
Если вход:
56 6
The output is:
56 6
56OT?
56.000000.
vector 0.000000 56.000000
vector 0.000000 0.000000
Что я могу сделать вывод:
56 6
56
56.000000.
56 6
6
6.000000.
vector 0.000000 56.000000
vector 0.000000 6.000000
Спасибо
Пожалуйста, отредактируйте ваше сообщение и исправьте отступ. – Lundin
Узнайте, как использовать отладчик, и пройдите через код, построчно. –
Условия окончания цикла '<=' являются подозрительными. В первом случае 't' проходит мимо длины строки. Во втором «b» индексирует элемент «RPN [b]», который не был установлен при текущем значении 'j', который был увеличен после его использования. –