【问题标题】:How to check if value exists in struct or not?如何检查结构中是否存在值?
【发布时间】:2021-01-23 08:09:24
【问题描述】:

我想问你们,这里我的代码无法检查我的值是否存在于结构中,我已经输入了值,但是没有人进入 if else 条件,有人可以帮助我吗?

#include <stdio.h>
    
int main(){
    int a,i;
    struct data {
        char nim[10];
    };
    
    struct data batas[100];
        
    printf("TEST1 : "); scanf("%[^\n]s", batas[0].nim);
    printf("TEST2 : "); scanf(" %[^\n]s", batas[1].nim);
    printf("TEST3 : "); scanf(" %[^\n]s", batas[3].nim);
        
    printf("TEST : "); scanf(" %[^\n]s", batas[a].nim);
    for(i=0; i<a; i++){
        if (batas[a].nim == batas[i].nim) {
            printf("Value exist");
        } else {
            printf("Value doesn't exist");
        }
    }
    return 0;
}

【问题讨论】:

  • a 没有在任何地方设置
  • 您的变量a 未初始化。默认可以设置为0,这样for循环就永远不会执行。
  • "我已经输入了值" --> 使用了哪些值?
  • scanf("%[^\n]s" --> scanf(" %9[^\n]" 避免缓冲区溢出。
  • @chux-ReinstateMonica 我输入“rudy tri saputra”作为值

标签: arrays c validation struct


【解决方案1】:

您不能将chars 的数组与等号运算符进行比较,而是:

if (strcmp(batas[a].nim, batas[i].nim) == 0)

if (!strcmp(batas[a].nim, batas[i].nim))

你需要#include &lt;string.h&gt;

另外,请注意您使用的是未初始化的a

【讨论】:

  • 不应该strcmp(batas[a].nim == batas[i].nim)strcmp(batas[a].nim, batas[i].nim)
  • @DavidRanieri 抱歉,根据您提供的这段代码,我已经用 a=0 初始化了 a,但它仍然没有输入到“值存在”中
【解决方案2】:

从你给出的,它仍然无法输入“值存在”值。这是我的完整代码行。

#include <stdio.h>
#include <string.h>

struct data {
    char nim[10];
};

struct data batas[100];
int a=0, b, c, d;
int i, j;
char x[20];

void inputdata()
{
  printf("\nInput Data\n");
  printf("=======================\n");
  printf("NIM : "); scanf("%s", batas[a].nim);
  for(i=0; i<a; i++){
    if (!strcmp(batas[a].nim, batas[i].nim)) {
      strcpy(x, "FLAG");
    } else {
      strcpy(x, "FLAGX");
    }
  }
  printf("%s", x);
  a++;
}

void showdata()
{
  j=0;
  for(i=0; i<a; i++){
    j = j + 1;
    printf("\nData-%i", j);
    printf("\nNIM : %s", batas[i].nim);
  }
}

int main() {
  int menu;
  do {
    printf("\nChoose input = "); scanf("%d", &menu);
    switch(menu)
    {
      case 1 : inputdata(); break;
      case 2 : showdata(); break;
    }
  }while (menu != 3);

  return 0;
}

【讨论】:

  • 如果您将a 设置为0,则循环永远不会执行,因为条件a &gt;= 0 为假,您的意思是int a = 100;
  • @DavidRanieri 我尝试将 a 更改为 100,但结果通过检查我的 showdata() 它得到了充满 a 数组的结果。我刚刚意识到,根据我的for(i=0; i&lt;a; i++){ 条件,它无法获得确切的值,它总是得到“FLAGX”结果(总是得到数组结果的结尾)
  • 您是否检查了我回答中评论中提供的链接?
  • @DavidRanieri 是的,我已经检查过了,谢谢大卫,最初我想采用batas[a].nim == batas[i].nim 的条件,但在我尝试采用x 的值之后,结果是它总是采用最新的结果,而不是我设定的结果。喜欢x = FLAG
  • @DavidRanieri She did.
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 2014-09-15
  • 2017-06-16
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
相关资源
最近更新 更多