strcmp return c 中相同的值
strcmp return same value in c
所以我在这里写了这个程序,它产生了 2 组与它们相连的编号单词,所以稍后我们可以通过组合这些组中的单词(每组单独设置)来生成单词,每次我们生成这两个单词时,它都会比较它们是否这些话是一样的,if are it ends program.
strcmp 没有正常工作,我不知道为什么 :...C
你能帮我吗
我在 Ubuntu 14.04 LTS 上使用 code::blocks
当然还有代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LISTSIZE 256
#define CHAINSIZE 64
int main()
{
char listA[LISTSIZE][CHAINSIZE], listB[LISTSIZE][CHAINSIZE]; //i know malloc would be nice here but it's not really important here
int j = 0, i = 0, n;
printf("Podaj wartość indeksu i: ");
scanf("%d", &i);
for(j = 0 ; j < i; j++)
{
printf("Podaj łańcuch do listy A: "); //enter chain to list A
scanf("%s", &listA[j]);
}
for( j = 0; j < i; j++)
{
printf("Podaj łańcuch do listy B: "); //enter chain to list B
scanf("%s", &listB[j]);
}
printf("Ile chesz podać indeksów? "); //how much indexes do you like to choose
scanf("%d", &n);
for (j = 0; j < n; j++)
{
printf("\nWpisz index", j); //enter index
scanf("%d", &i);
strcat(listA[LISTSIZE - 1], listA[i - 1]);
strcat(listB[LISTSIZE - 1], listB[i - 1]);
printf("\nslowo A: %s", listA[LISTSIZE - 1]);
printf("\nslowo B: %s", listB[LISTSIZE - 1]);
printf("\n %d", strcmp(listA[LISTSIZE - 1], listB[LISTSIZE - 1])); //just to check
// here i have a problem
if(strcmp(listA[LISTSIZE - 1], listB[LISTSIZE - 1]) == 0)
{
printf("\tRozwiązanie zostało znalezione!\n");
return 0;
}
}
printf("Nie znaleziono rozwiązania"); //no solution was found
return 0;
}
这是你的问题
scanf("%s", &listA[j]);
删除 &
scanf("%s", listA[j]);
或
scanf("%s", &listA[j][0]);
并修复 listB
案例。
此外,不要那样调用scanf
,通过
防止缓冲区溢出
scanf("%63s", listA[j]);
并检查 scanf
的 return 值,如果不检查,可能会调用未定义的行为。
listA
和 listB
应该为 strcat(listA[LISTSIZE - 1], listA[i - 1]);strcat(listB[LISTSIZE - 1], listB[i - 1]);
初始化
char listA[LISTSIZE][CHAINSIZE]={0}, listB[LISTSIZE][CHAINSIZE]={0};
还有
scanf("%s", listA[j]);
...
scanf("%s", listB[j]);
所以我在这里写了这个程序,它产生了 2 组与它们相连的编号单词,所以稍后我们可以通过组合这些组中的单词(每组单独设置)来生成单词,每次我们生成这两个单词时,它都会比较它们是否这些话是一样的,if are it ends program.
strcmp 没有正常工作,我不知道为什么 :...C 你能帮我吗
我在 Ubuntu 14.04 LTS 上使用 code::blocks 当然还有代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LISTSIZE 256
#define CHAINSIZE 64
int main()
{
char listA[LISTSIZE][CHAINSIZE], listB[LISTSIZE][CHAINSIZE]; //i know malloc would be nice here but it's not really important here
int j = 0, i = 0, n;
printf("Podaj wartość indeksu i: ");
scanf("%d", &i);
for(j = 0 ; j < i; j++)
{
printf("Podaj łańcuch do listy A: "); //enter chain to list A
scanf("%s", &listA[j]);
}
for( j = 0; j < i; j++)
{
printf("Podaj łańcuch do listy B: "); //enter chain to list B
scanf("%s", &listB[j]);
}
printf("Ile chesz podać indeksów? "); //how much indexes do you like to choose
scanf("%d", &n);
for (j = 0; j < n; j++)
{
printf("\nWpisz index", j); //enter index
scanf("%d", &i);
strcat(listA[LISTSIZE - 1], listA[i - 1]);
strcat(listB[LISTSIZE - 1], listB[i - 1]);
printf("\nslowo A: %s", listA[LISTSIZE - 1]);
printf("\nslowo B: %s", listB[LISTSIZE - 1]);
printf("\n %d", strcmp(listA[LISTSIZE - 1], listB[LISTSIZE - 1])); //just to check
// here i have a problem
if(strcmp(listA[LISTSIZE - 1], listB[LISTSIZE - 1]) == 0)
{
printf("\tRozwiązanie zostało znalezione!\n");
return 0;
}
}
printf("Nie znaleziono rozwiązania"); //no solution was found
return 0;
}
这是你的问题
scanf("%s", &listA[j]);
删除 &
scanf("%s", listA[j]);
或
scanf("%s", &listA[j][0]);
并修复 listB
案例。
此外,不要那样调用scanf
,通过
scanf("%63s", listA[j]);
并检查 scanf
的 return 值,如果不检查,可能会调用未定义的行为。
listA
和 listB
应该为 strcat(listA[LISTSIZE - 1], listA[i - 1]);strcat(listB[LISTSIZE - 1], listB[i - 1]);
char listA[LISTSIZE][CHAINSIZE]={0}, listB[LISTSIZE][CHAINSIZE]={0};
还有
scanf("%s", listA[j]);
...
scanf("%s", listB[j]);