Finding data in an input file

Hello! I am working on a program that asks the user to type in a zip code and the program will go through a file and display the county for that zip code.

This file contains every county and zip code in Indiana, which is 1096 lines of code.

The problem I am running into is on line 20 of the code I can’t use if(zip=county) without it showing an error message. I know why it shows the error message but I don’t know what else I can do to have the program go through the entire file to find which county uses the zip code that the user entered.

Any help would be appreciated :)

Here is the code I currently have

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  #include <iostream>
#include <fstream>
using std::ifstream;
using std::ios;
using namespace std;
 
int main(void) {
 
ifstream zipcodes;
string county = " ";
int zip =0;
zipcodes.open("IndianaZip.txt");
 
if(zipcodes.is_open())
{
  getline(zipcodes,county,',');
  zipcodes>>zip;
  cout <<"Enter in a zip: ";
  cin >> zip;
  if(zip=county)
  cout << "County: "<<county<< endl;
 
 zipcodes.close();
}
else
cout << "Error in opening";
}
Last edited on
use == for equality test. = is for assignment.

But zip is of type int and county is of type string. So these can't be compared.

Also, you'll need to iterate through the file using a loop reading each pair and checking - rather than just read the first one from the file.

Post a few lines of the actual file as an example.
Do you mean this (not tested) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <string>

int main()
{
	std::ifstream zipfile("IndianaZip.txt");

	if (zipfile) {
		int zip {}, zipcode {};

		std::cout << "Enter a zip code: ";
		std::cin >> zipcode;

		for (std::string county; std::getline(zipfile >> std::ws, county, ',') >> zip;)
			if (zip == zipcode) {
				std::cout << "County: " << county << '\n';
				break;
			}
	} else
		std::cout << "Error in opening";
}

So I used your code and it was almost perfect. The program displayed the correct county, but then for some reason it would display like 1 or 2 other county’s. I’m not exactly sure why it is doing that, my guess is maybe it is displaying a county that contains the numbers that the user typed in.

For example...
Enter in a zip: 46124
County: Bartmelow
County: Johnson
County: Adams

It should only display Barthmelow and not Johnson and Shelby


Anyway here is some lines from the input file, each county is in alphabetical order:

Adams,46711
Allen,46706
Barthmelow,46124
Benton,47917

Let me know if you figure anything else out or need me to show more lines from the file, I really appreciate your help so far
Also here is what my code looks like after your example so far

#include <iostream>
#include <fstream>
#include <string>
using std::ifstream;
using std::ios;
using namespace std;

int main(void) {

ifstream zipcodes;
string county = " ";
int zip ={};
int zipcode{};
zipcodes.open("IndianaZip.txt");

if(zipcodes.is_open())
{
getline(zipcodes,county,',');
zipcodes>>zip;
cout <<"Enter in a zip: ";
cin >> zipcode;
for(string county; getline(zipcodes>>std::ws,county,',')>> zip;)
if (zip == zipcode)
{
cout << "County: " << county<< endl;
}

zipcodes.close();
}
else
cout << "Error in opening";
}
When posting code, please use code tags so that the code is readable!

So why change my code? Your code isn't the same as mine. Within the if (zip....) you're missing a break if the comparison is true. Also before the for loop you don't need the getline() and >>.

However, if your code as above is displaying more than one county, are you sure that the data file doesn't have duplicate zip codes present?

Put the data file on the internet somewhere and post a link here to it. I'll have a look at the full data and check.
Last edited on
I cleaned up my code and added the break and took out the get line before the for loop like you said and the code works now! It doesn’t add any extra county’s anymore. All I had to do was just delete a couple things so thank you for pointing that out


Here is what the finished code looks like in case you were wondering

Thank you so much for your help :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#include <iostream>
#include <fstream>
#include <string>
using std::ifstream;
using std::ios;
using namespace std;

int main()
{
	ifstream zipfile("IndianaZip.txt");

	if (zipfile) {
		int zip {}, zipcode {};

		cout << "Enter a zip code: ";
		cin >> zipcode;

		for (string county; getline(zipfile >> std::ws, county, ',') >> zip;)
			if (zip == zipcode) {
				cout << "County: " << county << '\n';
				break;
			}
	} else
		cout << "Error in opening";
}
Last edited on
Great - but this doesn't check that you have duplicate zip codes in the data file - which you may.well have. If you post a link to the file, I'll check.
Hello iUseCPlusPlus,

Here is another option unless you have to read from the file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <string>

#include <fstream>

struct County
{
    std::string sCounty;
    int sZipCode{};
};

int main(void)
{
    constexpr int MAXSIZE{ 10 };

    const std::string inFileName{ "IndianaZip.txt" };  // <--- Put File name here.

    std::ifstream inFile(inFileName);

    if (!inFile)
    {
        //std::cout << "\n File " << std::quoted(inFileName) << " did not open." << std::endl;
        std::cout << "\n File \"" << inFileName << "\" did not open." << std::endl;

        return 1;  // <--- No reason to continue the program.
    }

    std::string county = " ";
    int zip = {}, filecCount{};
    int zipcode{};
    County countys[MAXSIZE];  // <--- A "vector" would be better.

    while (std::getline(inFile >> std::ws, countys[filecCount].sCounty, ',') >> countys[filecCount].sZipCode)
        filecCount++;

    std::cout << "Enter in a zip: ";
    std::cin >> zipcode;

    for (int idx{}; idx < filecCount; idx++)
    {
        if (countys[idx].sZipCode == zipcode)
        {
            std::cout << "County: " << countys[idx].sCounty << '\n';

            break;
        }
    }


    // A fair C++ replacement for "system("pause")". Or a way to pause the program.
    // The next line may not be needed. If you have to press enter to see the prompt it is not needed.
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');  // <--- Requires header file <limits>.
    std::cout << "\n\n Press Enter to continue: ";
    std::cin.get();

    return 0;  // <--- Not required, but makes a good break point.
}

Just a suggestion. See what you think.

Due to the "break" statement you would never know if you have any duplicates.

Andy
@Andy, if you're reading the whole file first, then use a std::map. That would make look-up easy and would also easily warn of duplicates.

Consider as C++17 code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <fstream>
#include <string>
#include <map>

int main()
{
	std::ifstream zipfile("IndianaZip.txt");

	if (!zipfile)
		return (std::cout << "Cannot open file\n"), 1;

	std::map<int, std::string> zips;
	int zip {}, zipcode {};

	for (std::string county; std::getline(zipfile >> std::ws, county, ',') >> zip; )
		if (const auto ins {zips.emplace(zip, county)}; !ins.second)
			std::cout << "Duplicate zip " << zip << " for county " << county << ". Originally " << ins.first->second << '\n';

	std::cout << "Enter a zip code: ";
	std::cin >> zipcode;

	if (const auto itr {zips.find(zipcode)}; itr != zips.end())
		std::cout << "County: " << itr->second << '\n';
	else
		std::cout << "Zip not found\n";
}


Last edited on
Here is a link to the file that shows the county’s and zip codes, there is just over 1,000 so I don’t expect you to check over every one

https://docs.google.com/document/d/1-NEd9YG-Tx2xz-QGYe_dGj9TFURjDZTJalU-FUbVCE0/edit
Last edited on
@Handy Andy

I used your code and for some reason when I run it the program doesn’t display anything, it could be a problem on my end but i don’t know. Also I am unfamiliar with some of the code like “constexpr” in line 14 and I have never used return 1 before, I am still a beginner.

I’m sure your code works fine on your end, the website I use to code in c++ might just not work correctly or something, but thank you for your suggestion. What do you use to code in c++? I use a website called repl.it and since you may code somewhere else that could be why the code doesn’t work for me
OK, you're got a lot of duplicates (407). From my latest code above:

Part 1:

Duplicate zip 46040 for county Madison. Originally Hamilton
Duplicate zip 46056 for county Madison. Originally Hancock
Duplicate zip 46064 for county Madison. Originally Hancock
Duplicate zip 46070 for county Madison. Originally Delaware
Duplicate zip 47356 for county Madison. Originally Delaware
Duplicate zip 46077 for county Marion. Originally Boone
Duplicate zip 46113 for county Marion. Originally Hendricks
Duplicate zip 46229 for county Marion. Originally Hancock
Duplicate zip 46231 for county Marion. Originally Hendricks
Duplicate zip 46234 for county Marion. Originally Hendricks
Duplicate zip 46236 for county Marion. Originally Hamilton
Duplicate zip 46250 for county Marion. Originally Hamilton
Duplicate zip 46256 for county Marion. Originally Hamilton
Duplicate zip 46259 for county Marion. Originally Johnson
Duplicate zip 46260 for county Marion. Originally Hamilton
Duplicate zip 46278 for county Marion. Originally Boone
Duplicate zip 46501 for county Marshall. Originally Fulton
Duplicate zip 46504 for county Marshall. Originally Kosciusko
Duplicate zip 46506 for county Marshall. Originally Kosciusko
Duplicate zip 46511 for county Marshall. Originally Fulton
Duplicate zip 46524 for county Marshall. Originally Kosciusko
Duplicate zip 46550 for county Marshall. Originally Elkhart
Duplicate zip 46570 for county Marshall. Originally Fulton
Duplicate zip 46574 for county Marshall. Originally LaPorte
Duplicate zip 47470 for county Martin. Originally Lawrence
Duplicate zip 47553 for county Martin. Originally Daviess
Duplicate zip 46901 for county Miami. Originally Howard
Duplicate zip 46910 for county Miami. Originally Fulton
Duplicate zip 46919 for county Miami. Originally Grant
Duplicate zip 46926 for county Miami. Originally Cass
Duplicate zip 46932 for county Miami. Originally Cass
Duplicate zip 46951 for county Miami. Originally Fulton
Duplicate zip 46970 for county Miami. Originally Cass
Duplicate zip 46151 for county Monroe. Originally Johnson
Duplicate zip 47264 for county Monroe. Originally Jackson
Duplicate zip 47401 for county Monroe. Originally Brown
Duplicate zip 47421 for county Monroe. Originally Lawrence
Duplicate zip 47436 for county Monroe. Originally Lawrence
Duplicate zip 47448 for county Monroe. Originally Bartholomew
Duplicate zip 47462 for county Monroe. Originally Greene
Duplicate zip 47468 for county Monroe. Originally Brown
Duplicate zip 46035 for county Montgomery. Originally Boone
Duplicate zip 47967 for county Montgomery. Originally Fountain
Duplicate zip 47990 for county Montgomery. Originally Fountain
Duplicate zip 46113 for county Morgan. Originally Hendricks
Duplicate zip 46118 for county Morgan. Originally Hendricks
Duplicate zip 46151 for county Morgan. Originally Johnson
Duplicate zip 46158 for county Morgan. Originally Hendricks
Duplicate zip 46160 for county Morgan. Originally Brown
Duplicate zip 46180 for county Morgan. Originally Hendricks
Duplicate zip 47433 for county Morgan. Originally Monroe
Duplicate zip 46310 for county Newton. Originally Jasper
Duplicate zip 47922 for county Newton. Originally Jasper
Duplicate zip 47942 for county Newton. Originally Benton
Duplicate zip 47943 for county Newton. Originally Jasper
Duplicate zip 47948 for county Newton. Originally Benton
Duplicate zip 47978 for county Newton. Originally Jasper
Duplicate zip 46562 for county Noble. Originally Kosciusko
Duplicate zip 46571 for county Noble. Originally LaGrange
Duplicate zip 46710 for county Noble. Originally DeKalb
Duplicate zip 46723 for county Noble. Originally Allen
Duplicate zip 46732 for county Noble. Originally Kosciusko
Duplicate zip 46748 for county Noble. Originally Allen
Duplicate zip 46755 for county Noble. Originally DeKalb
Duplicate zip 46763 for county Noble. Originally DeKalb
Duplicate zip 46767 for county Noble. Originally Elkhart
Duplicate zip 46795 for county Noble. Originally LaGrange
Duplicate zip 47001 for county Ohio. Originally Dearborn
Duplicate zip 47018 for county Ohio. Originally Dearborn
Duplicate zip 47118 for county Orange. Originally Crawford
Duplicate zip 47125 for county Orange. Originally Harrison
Duplicate zip 47140 for county Orange. Originally Crawford
Duplicate zip 47432 for county Orange. Originally Dubois
Duplicate zip 46120 for county Owen. Originally Morgan
Duplicate zip 47404 for county Owen. Originally Monroe
Duplicate zip 47427 for county Owen. Originally Clay
Duplicate zip 47433 for county Owen. Originally Monroe
Duplicate zip 47456 for county Owen. Originally Morgan
Duplicate zip 47460 for county Owen. Originally Monroe
Duplicate zip 47833 for county Owen. Originally Clay
Duplicate zip 47868 for county Owen. Originally Clay
Duplicate zip 47834 for county Parke. Originally Clay
Duplicate zip 47837 for county Parke. Originally Clay
Duplicate zip 47874 for county Parke. Originally Clay
Duplicate zip 47952 for county Parke. Originally Fountain
Duplicate zip 47118 for county Perry. Originally Crawford
Duplicate zip 47137 for county Perry. Originally Crawford
Duplicate zip 47513 for county Perry. Originally Crawford
Duplicate zip 47532 for county Perry. Originally Dubois


Last edited on
Part 2:


Duplicate zip 47541 for county Pike. Originally Dubois
Duplicate zip 47546 for county Pike. Originally Dubois
Duplicate zip 47564 for county Pike. Originally Dubois
Duplicate zip 47590 for county Pike. Originally Dubois
Duplicate zip 47640 for county Pike. Originally Gibson
Duplicate zip 47660 for county Pike. Originally Gibson
Duplicate zip 46307 for county Porter. Originally Lake
Duplicate zip 46341 for county Porter. Originally Jasper
Duplicate zip 46342 for county Porter. Originally Lake
Duplicate zip 46348 for county Porter. Originally LaPorte
Duplicate zip 46360 for county Porter. Originally LaPorte
Duplicate zip 46391 for county Porter. Originally LaPorte
Duplicate zip 46403 for county Porter. Originally Lake
Duplicate zip 46405 for county Porter. Originally Lake
Duplicate zip 46374 for county Pulaski. Originally Jasper
Duplicate zip 46511 for county Pulaski. Originally Fulton
Duplicate zip 46939 for county Pulaski. Originally Fulton
Duplicate zip 46960 for county Pulaski. Originally Fulton
Duplicate zip 46978 for county Pulaski. Originally Cass
Duplicate zip 47946 for county Pulaski. Originally Jasper
Duplicate zip 47957 for county Pulaski. Originally Jasper
Duplicate zip 47959 for county Pulaski. Originally Jasper
Duplicate zip 47960 for county Pulaski. Originally Carroll
Duplicate zip 46120 for county Putnam. Originally Morgan
Duplicate zip 46121 for county Putnam. Originally Hendricks
Duplicate zip 46180 for county Putnam. Originally Hendricks
Duplicate zip 47456 for county Putnam. Originally Morgan
Duplicate zip 47868 for county Putnam. Originally Clay
Duplicate zip 47989 for county Putnam. Originally Montgomery
Duplicate zip 47320 for county Randolph. Originally Delaware
Duplicate zip 47354 for county Randolph. Originally Delaware
Duplicate zip 47368 for county Randolph. Originally Delaware
Duplicate zip 47373 for county Randolph. Originally Jay
Duplicate zip 47380 for county Randolph. Originally Jay
Duplicate zip 47390 for county Randolph. Originally Jay
Duplicate zip 47006 for county Ripley. Originally Franklin
Duplicate zip 47017 for county Ripley. Originally Ohio
Duplicate zip 47018 for county Ripley. Originally Dearborn
Duplicate zip 47031 for county Ripley. Originally Dearborn
Duplicate zip 47032 for county Ripley. Originally Dearborn
Duplicate zip 47041 for county Ripley. Originally Dearborn
Duplicate zip 47224 for county Ripley. Originally Jefferson
Duplicate zip 47240 for county Ripley. Originally Decatur
Duplicate zip 47250 for county Ripley. Originally Jefferson
Duplicate zip 46115 for county Rush. Originally Hancock
Duplicate zip 46127 for county Rush. Originally Fayette
Duplicate zip 46133 for county Rush. Originally Fayette
Duplicate zip 46140 for county Rush. Originally Hancock
Duplicate zip 46148 for county Rush. Originally Henry
Duplicate zip 46161 for county Rush. Originally Hancock
Duplicate zip 46173 for county Rush. Originally Decatur
Duplicate zip 47352 for county Rush. Originally Henry
Duplicate zip 46506 for county St. Joseph. Originally Kosciusko
Duplicate zip 46530 for county St. Joseph. Originally Elkhart
Duplicate zip 46536 for county St. Joseph. Originally Marshall
Duplicate zip 46550 for county St. Joseph. Originally Elkhart
Duplicate zip 46552 for county St. Joseph. Originally LaPorte
Duplicate zip 46554 for county St. Joseph. Originally LaPorte
Duplicate zip 46561 for county St. Joseph. Originally Elkhart
Duplicate zip 46563 for county St. Joseph. Originally Marshall
Duplicate zip 46573 for county St. Joseph. Originally Elkhart
Duplicate zip 46574 for county St. Joseph. Originally LaPorte
Duplicate zip 47102 for county Scott. Originally Jackson
Duplicate zip 47126 for county Scott. Originally Clark
Duplicate zip 47138 for county Scott. Originally Jefferson
Duplicate zip 47147 for county Scott. Originally Clark
Duplicate zip 47177 for county Scott. Originally Clark
Duplicate zip 47230 for county Scott. Originally Jefferson
Duplicate zip 46124 for county Shelby. Originally Bartholomew
Duplicate zip 46130 for county Shelby. Originally Hancock
Duplicate zip 46131 for county Shelby. Originally Johnson
Duplicate zip 46150 for county Shelby. Originally Rush
Duplicate zip 46161 for county Shelby. Originally Hancock
Duplicate zip 46162 for county Shelby. Originally Johnson
Duplicate zip 46163 for county Shelby. Originally Hancock
Duplicate zip 46182 for county Shelby. Originally Rush
Duplicate zip 46259 for county Shelby. Originally Johnson
Duplicate zip 47234 for county Shelby. Originally Bartholomew
Duplicate zip 47272 for county Shelby. Originally Decatur
Duplicate zip 47523 for county Spencer. Originally Dubois
Duplicate zip 47532 for county Spencer. Originally Dubois
Duplicate zip 47577 for county Spencer. Originally Perry
Duplicate zip 47611 for county Spencer. Originally Perry
Duplicate zip 46348 for county Starke. Originally LaPorte
Duplicate zip 46366 for county Starke. Originally Pulaski
Duplicate zip 46374 for county Starke. Originally Jasper
Duplicate zip 46511 for county Starke. Originally Fulton
Duplicate zip 46532 for county Starke. Originally LaPorte
Duplicate zip 46534 for county Starke. Originally LaPorte
Duplicate zip 46574 for county Starke. Originally LaPorte
Duplicate zip 46960 for county Starke. Originally Fulton
Duplicate zip 46705 for county Steuben. Originally DeKalb
Duplicate zip 46742 for county Steuben. Originally DeKalb
Duplicate zip 46747 for county Steuben. Originally DeKalb
Duplicate zip 46761 for county Steuben. Originally LaGrange
Duplicate zip 46776 for county Steuben. Originally LaGrange
Duplicate zip 47438 for county Sullivan. Originally Clay
Duplicate zip 47858 for county Sullivan. Originally Clay
Duplicate zip 47011 for county Switzerland. Originally Ohio
Duplicate zip 47017 for county Switzerland. Originally Ohio
Duplicate zip 47040 for county Switzerland. Originally Ohio
Duplicate zip 47043 for county Switzerland. Originally Jefferson
Duplicate zip 47224 for county Switzerland. Originally Jefferson
Duplicate zip 47250 for county Switzerland. Originally Jefferson
Duplicate zip 46058 for county Tippecanoe. Originally Clinton
Duplicate zip 46923 for county Tippecanoe. Originally Carroll
Duplicate zip 47918 for county Tippecanoe. Originally Fountain
Duplicate zip 47920 for county Tippecanoe. Originally Carroll
Duplicate zip 47930 for county Tippecanoe. Originally Clinton
Duplicate zip 47955 for county Tippecanoe. Originally Montgomery
Duplicate zip 47967 for county Tippecanoe. Originally Fountain
Duplicate zip 47970 for county Tippecanoe. Originally Benton
Duplicate zip 47981 for county Tippecanoe. Originally Montgomery

Part 3:


Duplicate zip 46031 for county Tipton. Originally Hamilton
Duplicate zip 46036 for county Tipton. Originally Grant
Duplicate zip 46049 for county Tipton. Originally Clinton
Duplicate zip 46050 for county Tipton. Originally Boone
Duplicate zip 46076 for county Tipton. Originally Howard
Duplicate zip 46902 for county Tipton. Originally Howard
Duplicate zip 46979 for county Tipton. Originally Carroll
Duplicate zip 47003 for county Union. Originally Franklin
Duplicate zip 47325 for county Union. Originally Fayette
Duplicate zip 47331 for county Union. Originally Fayette
Duplicate zip 47353 for county Union. Originally Franklin
Duplicate zip 47613 for county Vanderburgh. Originally Gibson
Duplicate zip 47638 for county Vanderburgh. Originally Posey
Duplicate zip 47639 for county Vanderburgh. Originally Gibson
Duplicate zip 47712 for county Vanderburgh. Originally Posey
Duplicate zip 47725 for county Vanderburgh. Originally Gibson
Duplicate zip 47932 for county Vermillion. Originally Fountain
Duplicate zip 47834 for county Vigo. Originally Clay
Duplicate zip 47842 for county Vigo. Originally Vermillion
Duplicate zip 47850 for county Vigo. Originally Sullivan
Duplicate zip 47858 for county Vigo. Originally Clay
Duplicate zip 47874 for county Vigo. Originally Clay
Duplicate zip 46702 for county Wabash. Originally Huntington
Duplicate zip 46911 for county Wabash. Originally Miami
Duplicate zip 46919 for county Wabash. Originally Grant
Duplicate zip 46926 for county Wabash. Originally Cass
Duplicate zip 46940 for county Wabash. Originally Grant
Duplicate zip 46962 for county Wabash. Originally Kosciusko
Duplicate zip 46970 for county Wabash. Originally Cass
Duplicate zip 46974 for county Wabash. Originally Miami
Duplicate zip 46982 for county Wabash. Originally Fulton
Duplicate zip 47906 for county Warren. Originally Tippecanoe
Duplicate zip 47917 for county Warren. Originally Benton
Duplicate zip 47918 for county Warren. Originally Fountain
Duplicate zip 47921 for county Warren. Originally Benton
Duplicate zip 47932 for county Warren. Originally Fountain
Duplicate zip 47944 for county Warren. Originally Benton
Duplicate zip 47970 for county Warren. Originally Benton
Duplicate zip 47975 for county Warren. Originally Benton
Duplicate zip 47523 for county Warrick. Originally Dubois
Duplicate zip 47537 for county Warrick. Originally Spencer
Duplicate zip 47541 for county Warrick. Originally Dubois
Duplicate zip 47601 for county Warrick. Originally Spencer
Duplicate zip 47613 for county Warrick. Originally Gibson
Duplicate zip 47619 for county Warrick. Originally Pike
Duplicate zip 47637 for county Warrick. Originally Spencer
Duplicate zip 47106 for county Washington. Originally Clark
Duplicate zip 47108 for county Washington. Originally Orange
Duplicate zip 47115 for county Washington. Originally Harrison
Duplicate zip 47120 for county Washington. Originally Harrison
Duplicate zip 47125 for county Washington. Originally Harrison
Duplicate zip 47126 for county Washington. Originally Clark
Duplicate zip 47145 for county Washington. Originally Crawford
Duplicate zip 47164 for county Washington. Originally Floyd
Duplicate zip 47165 for county Washington. Originally Clark
Duplicate zip 47170 for county Washington. Originally Scott
Duplicate zip 47260 for county Washington. Originally Jackson
Duplicate zip 47281 for county Washington. Originally Jackson
Duplicate zip 47327 for county Wayne. Originally Henry
Duplicate zip 47346 for county Wayne. Originally Henry
Duplicate zip 47354 for county Wayne. Originally Delaware
Duplicate zip 47357 for county Wayne. Originally Fayette
Duplicate zip 47358 for county Wayne. Originally Randolph
Duplicate zip 47360 for county Wayne. Originally Henry
Duplicate zip 47393 for county Wayne. Originally Randolph
Duplicate zip 46714 for county Wells. Originally Adams
Duplicate zip 46740 for county Wells. Originally Adams
Duplicate zip 46750 for county Wells. Originally Huntington
Duplicate zip 46770 for county Wells. Originally Huntington
Duplicate zip 46777 for county Wells. Originally Adams
Duplicate zip 46783 for county Wells. Originally Allen
Duplicate zip 46792 for county Wells. Originally Huntington
Duplicate zip 46798 for county Wells. Originally Allen
Duplicate zip 46952 for county Wells. Originally Blackford
Duplicate zip 46991 for county Wells. Originally Grant
Duplicate zip 47359 for county Wells. Originally Blackford
Duplicate zip 46978 for county White. Originally Cass
Duplicate zip 46985 for county White. Originally Pulaski
Duplicate zip 46996 for county White. Originally Pulaski
Duplicate zip 47906 for county White. Originally Tippecanoe
Duplicate zip 47920 for county White. Originally Carroll
Duplicate zip 47923 for county White. Originally Carroll
Duplicate zip 47926 for county White. Originally Carroll
Duplicate zip 47950 for county White. Originally Carroll
Duplicate zip 47959 for county White. Originally Jasper
Duplicate zip 47960 for county White. Originally Carroll
Duplicate zip 47970 for county White. Originally Benton
Duplicate zip 47978 for county White. Originally Jasper
Duplicate zip 47995 for county White. Originally Jasper
Duplicate zip 46562 for county Whitley. Originally Kosciusko
Duplicate zip 46723 for county Whitley. Originally Allen
Duplicate zip 46725 for county Whitley. Originally Noble
Duplicate zip 46764 for county Whitley. Originally Noble
Duplicate zip 46783 for county Whitley. Originally Allen
Duplicate zip 46787 for county Whitley. Originally Kosciusko
Duplicate zip 46818 for county Whitley. Originally Allen
Duplicate zip 46962 for county Whitley. Originally Kosciusko

Hello iUseCPlusPlus,

"constexpr" is the updated version of "const". From C++11 standards on I like to use "constexpr", but "const" will do.

As far as not displaying anything let me try something and see how it works here.

"return 0;" is most found at the end of "main". The (0)zero means that the program ended with nor problems. Any number other than (0)zero means there is a problem. I like using positive, but negative numbers will also work. This is a small program, so if it returns 1 it is easy to find. In larger programs the numbers like 1, 2 or 3 can help track down where the program had a problem.

I have not used "repl.it", so I am not familiar with it. I will give it a look. I use Microsofts, (MSVS), 2017 Community for an IDE to code with and the compiler that comes with it. This is the free version and it has more features than i will ever use. I find it good to work with. Code::Blocks is another well used free IDE. There are other IDEs out there some simple and some that cost. If you have the ability I would suggest looking into a good IDE and compiler for your computer.

If "repl.it" is similar to the shell program here you may not be able to post an input file for the program to use or if you can the path to the file may be missing. Just a guess.

Andy
Wow that is a lot... I’ll go back and fix them thank you for pointing it out.

After you pointed this out though I did find that most of these zip codes are actually located in multiple counties, which explains the program displaying multiple counties... can’t believe I didn’t realize that until now

Sorry about making you do more work than you needed to, and thanks for doing this I learned some new things from you
If these duplicates are not correct, then the data file is wrong and needs fixing.

If these are correct, then the original premise of no duplicates is wrong and 1 zip can have more than one county associated. In this case, just remove the break L18 from my original code or L22 from the OP's last code.
Hello iUseCPlusPlus,

"constexpr" is the updated version of "const" available from C++11 standards on. Since you should be using the 2011 or 2014 standards right now I like to use the updated versions of things. Just a mention that C++17 is considered the current standard to be using with C++20 being used more.

"return 0;" is usually found at the end of "main" and means that the program ended with no problems. Any value other than (0)zero would mean that there is a problem. Negative numbers will work, but I like using positive numbers. In a small program like it is easy to find if a (1) was returned, but in a larger program numbers lime 1, 2 or 3 etc. would make it easier to find in a search.

I am not familiar with "repl.it". I will have to look into that. I use Microsoft's Visual Studio 2017 Community. This is the free version and has more features than I will ever use. I also MSVS 2019 Community. Both come with a compiler or you can use something else if you choose. Code::Blocks is also a good free IDE. There are others, some simple and some that cost$$. I would not recommend VS Code. I have read where some people have has problems with it. If you have the ability I would suggest getting your own IDE to work with.

I did have a thought if "repl.it" is similiar to the shell program here you may not be able to save a file that the program can use and that could be why you get not output. Or the program is not finding the file. This could be a path problem.

As for the output:

For example...
Enter in a zip: 46124
County: Bartmelow
County: Johnson
County: Adams


It is possible that 1 zip code can cover 2 or 3 counties may be even 4. I am not sure how the Post Office laid out the zip codes in Indiana. The USPS may have a map of how the zip codes are set up in the state.

It may be better to remove any "break" statement in the if statement of the for loop in case there is more than 1 county for a zip code.

Andy
Hello iUseCPlusPlus,

Give this a try on "repl.it":
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <limits>
#include <string>
#include <sstream>

#include <fstream>

struct County
{
    std::string sCounty;
    int sZipCode{};
};

int main(void)
{
    constexpr int MAXSIZE{ 10 }; // 1097

    std::istringstream inFile
    {
        "Adams, 46711\n"
        "Allen, 46706\n"
        "Barthmelow, 46124\n"
        "Benton, 47917\n"
    };
    //const std::string inFileName{ "IndianaZip.txt" };  // <--- Put File name here.

    //std::ifstream inFile(inFileName);

    //if (!inFile)
    //{
    //    //std::cout << "\n File " << std::quoted(inFileName) << " did not open." << std::endl;
    //    std::cout << "\n File \"" << inFileName << "\" did not open." << std::endl;

    //    return 1;
    //}

    std::string county;  // <--- Does not need initialized. It is empyty when defined.
    int  filecCount{};
    int zipcode{};
    County countys[MAXSIZE];  // <--- A "vector" would be better.

    while (std::getline(inFile >> std::ws, countys[filecCount].sCounty, ',') >> countys[filecCount].sZipCode)
    {
        filecCount++;
        inFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');  // <--- Requires header file <limits>.
    }

    std::cout << "Enter in a zip: ";
    std::cin >> zipcode;

    for (int idx{}; idx < filecCount; idx++)
    {
        if (countys[idx].sZipCode == zipcode)
        {
            std::cout << "County: " << countys[idx].sCounty << '\n';

            //break;
        }
    }


    // A fair C++ replacement for "system("pause")". Or a way to pause the program.
    // The next line may not be needed. If you have to press enter to see the prompt it is not needed.
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');  // <--- Requires header file <limits>.
    std::cout << "\n\n Press Enter to continue: ";
    std::cin.get();

    return 0;  // <--- Not required, but makes a good break point.
}


Andy
Topic archived. No new replies allowed.