1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RECORDS 2
int main() {
    typedef struct {
        char firstName[30];
        char lastName[30];
        char street[35];
        char city[20];
        char state[3];
        int  zip;
        char phone[15];

        int  accountId;
    } Customer ;
    Customer customerArray[RECORDS];    


    typedef int records;
    records i = 0;  

    printf("================================================================\n");
    for(i = 0; i < RECORDS; ++i)
    {   

        printf("Enter data for customer %d\n", i + 1);
        printf("Enter firstname, last name, phone\n");
        scanf("%s %s %s", customerArray[i].firstName, customerArray[i].lastName, customerArray[i].phone);
        scanf("%*c");   

        printf("Enter Address (Street City State ZIP\n");
        scanf("%s %s %s %d", customerArray[i].street, customerArray[i].city, customerArray[i].state, &customerArray[i].zip);
        scanf("%*c");   

    }   


    for(i = 0; i < RECORDS; ++i) {
        char input[3]= {'\0'};
        printf("please enter state:\n");
        scanf("%s",input);  

        int strcmp(const char *s1, const char *s2);
        int strncmp(const char *s1, const char *s2, size_t n);
        char *custstate = customerArray[i].state;
        char *statelookup = input;


        if (strcmp(custstate, statelookup) == 0) {
        printf("\nData for customer number:%s", customerArray[i].accountId);
        printf("\nAccount:%s", customerArray[i].accountId);
        printf("\n Name:%s %s",customerArray[i].firstName, customerArray[i].lastName);
        printf("\nAddress:%s %s %s %d",customerArray[i].street, customerArray[i].city, customerArray[i].state, customerArray[i].zip);
        printf("\nPhone:%s",customerArray[i].phone);    

        }
        else
            printf("Could not find a match");

    }
    return 0;   


}

无法弄清楚为什么该结构的一个成员没有正确递增。帐户 ID 产生不准确的输出。而且客户编号也没有正确生产。例如 1、2 等。

所述成员的输出看起来像这样......

客户编号数据:1606416396 账户:1606416396

它应该是什么样子

客户 1 帐户 1 的数据

不知道我做错了什么。仍在学习 C. 完全菜鸟。任何帮助将不胜感激!

我在想我必须终止成员。但不确定这是不是真的,甚至是如何。

4

2 回答 2

3

您永远不会初始化该字段accountId。在 C 中,它不会因为使用未初始化的字段而出错,而是使用随机值(因为 RAM 将具有来自最后存在的任何内存的随机值)。因此,巨大的无意义价值被解释为是其他程序的遗留物。要解决此问题,您必须在访问之前将其设置为某些内容。

于 2013-02-25T05:01:55.553 回答
0

您在程序中使用的所有变量主要位于两个区域

  1. 堆栈段
  2. 数据段

默认情况下,所有自动程序变量和结构变量都存储在堆栈中,因此与所有堆栈变量一样,它们不会被编译器初始化,因此将包含一个不可预测的值,通常称为垃圾值。所以它是在声明期间显式初始化变量总是更好。

主要驻留在数据段中的变量主要是全局变量和静态变量。这些变量在声明期间自动初始化为 0 ,因此您不会找到任何垃圾值。

例子

static int i =0;  

是相同的

static int i;

看看这个页面,了解更多信息

http://www.geeksforgeeks.org/memory-layout-of-c-program/

于 2013-02-25T08:24:06.660 回答