Member 13028495 Ответов: 3

В этой программе p[2] не сравнивается с str[j], мне нужно разъяснение этой проблемы


#include<stdio.h>
int main()
{
char plaintext[10];
printf("Enter your plain text\n");
int i,j;
for(i=0;i<3;i++)
scanf("%c",&plaintext[i]);
int n;
printf("Enter the row & column for key matrix");
scanf("%d",&n);
int k[n][n],m[0][n];
char str[]="abcdefghijklmnopqrstuvwxyz";
printf("Enter your key");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&k[i][j]);
printf("\n Your key is %d x %d matrix \n",n,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d\t",k[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
{
printf("%d",i);
printf("%c",plaintext[i]);
for(j=0;j<25;j++)
{
if(plaintext[2]==str[j])
{
printf("\n %c%c \n",plaintext[i],str[j]);
m[0][i]=j;
}
}
}
printf("Your plaintext equivalent value is");
for(i=0;i<3;i++)
printf("\n%d\n",m[0][i]);
}


Что я уже пробовал:

В этой программе p[2] не сравнивается с str[j],мне нужно разъяснение этой проблемы

CPallini

Что вы имеете в виду своим вопросом?
В вашей программе нет p[2]. Вы имели в виду " открытый текст[2]"?
Я сделал небольшой тест и увидел, что код внутри блока "if (plaintext[2] == str[j])" выполнен.

3 Ответов

Рейтинг:
2

Patrice T

Прежде всего, используйте отступы, это поможет читать код

#include<stdio.h>
int main()
{
	char plaintext[10];
	printf("Enter your plain text\n");
	int i,j;
	for(i=0;i<3;i++)
		scanf("%c",&plaintext[i]);
	int n;
	printf("Enter the row & column for key matrix");
	scanf("%d",&n);
	int k[n][n],m[0][n];
	char str[]="abcdefghijklmnopqrstuvwxyz";
	printf("Enter your key");
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			scanf("%d",&k[i][j]);
	printf("\n Your key is %d x %d matrix \n",n,n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			printf("%d\t",k[i][j]);
		printf("\n");
	}
	for(i=0;i<3;i++)
	{
		printf("%d",i);
		printf("%c",plaintext[i]);
		for(j=0;j<25;j++)
		{
			if(plaintext[2]==str[j])
			{
				printf("\n %c%c \n",plaintext[i],str[j]);
				m[0][i]=j;
			}
		}
	}
	printf("Your plaintext equivalent value is");
	for(i=0;i<3;i++)
		printf("\n%d\n",m[0][i]);
}

Цитата:
В этой программе p[2] не сравнивается с str[j], мне нужно разъяснение этой проблемы

Откуда вы знаете, что сравнение не сделано ? Проблема может быть в том, что нет совпадения !
Единственный способ узнать это-использовать отладчик, чтобы убедиться.
Примечание: Вы не объяснили, что должен делать код.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

OriginalGriff

Как говорит CPallini, в вашем коде нет "p[2]", поэтому мы даже не можем начать исправлять это для вас. И честно говоря, даже если бы мы захотели, мы все равно не смогли бы сильно помочь, так как понятия не имеем, какими должны быть ваши входы, какие выходы вы ожидаете или даже что должно делать приложение!

Поэтому используйте отладчик и смотрите на свой код во время его выполнения.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!

И сделайте себе одолжение: сделайте отступ в своем коде. в его нынешнем формате "плоское левое поле" очень трудно понять, что происходит. Сделайте отступ, и вам станет намного легче увидеть, что связано с чем:

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d\t",k[i][j]);
printf("\n");
}
По сравнению с:
for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
        printf("%d\t",k[i][j]);
    printf("\n");
    }
например.

Это также очень хорошая идея, когда вы начинаете всегда использовать фигурные скобки, даже если вам нужна только одна строка кода:
for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
        {
        printf("%d\t",k[i][j]);
        }
    printf("\n");
    }
так как это делает его намного безопаснее, когда вы изменяете код.


Рейтинг:
0

KarstenK

Если вы хотите сравнить строки используйте strcmp.

И переосмыслить стратегию, которую исправить символ открытого текста [2] сравнивается с бегущим str[j]. Вы проверяете наличие открытого текста [2] в str.

Совет: напишите более чистый код с отступами и всеми фигурными скобками, чтобы сделать его более понятным. В лучшем случае для других...