this post was submitted on 11 May 2026
6 points (100.0% liked)

C Programming Language

1297 readers
4 users here now

Welcome to the C community!

C is quirky, flawed, and an enormous success.
... When I read commentary about suggestions for where C should go, I often think back and give thanks that it wasn't developed under the advice of a worldwide crowd.
... The only way to learn a new programming language is by writing programs in it.

ยฉ Dennis Ritchie

๐ŸŒ https://en.cppreference.com/w/c

founded 2 years ago
MODERATORS
 

Thank you all for your kind, patient and educative responses when I obnoxiously post amateur questions! ๐Ÿ’™ While I cannot make any promises because of how my brain works, I am almost ready to continue reading The C Programming Language, 2nd Edition. I just want to experiment a little bit with error handling, specifically how to handle wrong input (char VS. int, etc.) and also to learn to indentify code that runs the risk of overflow/underflow.

Question: what errors do you recommend checking for and handling?

Meanwhile, thank you all! ๐Ÿฅฐ

#include <stdio.h>  

//Function declarations  
int newPin();  
int checkPin(int i);  

//Program that prompts for, verifies and saves pins temporarily into an array  
int main() {  

	//New pin  
	int pin = 0;  

	//History  
	int history[10] = {0,0,0,0,0,0,0,0,0,0};  
	int history_limit = 10;  
	int history_index = 0;  

	printf("Hello there! What would you like to do? (V)iew your saved pins, (S)ave a new pin or (E)xit: ");  
	int choice = 0;  
	while ((choice = getchar()) != EOF) {  
		switch (choice) {  
			case ('V'): { //Display saved pins  
				printf("\nYour saved pins are:\n\n");  
				for (int i = 0; i < history_limit; i++) printf("%d\n", history[i]);  
				printf("\nWhat would you like to do next? (V)iew your saved pins, (S)ave a new pin or (E)xit: ");  
				break;  
			}  
			case('S'): { //Prompt for and verify newly entered pin  
				pin = newPin();  
				if (checkPin(pin) == pin) {  
					history[history_index] = pin;  
					history_index++;  
					if (history_index >= history_limit) history_index = 0;  
				}  
				break;  
			}  
			case ('E'): goto EXIT; //Terminate program  
		}  
	}  
EXIT:	printf("\nGoodbye!\n");  
	return 0;  
}  

//Function definitions  
//Prompt user to enter a new pin  
int newPin() {  
	
	int pin = 0;  
	
	printf("This enter your pin: ");  
	scanf("%d", &pin);  
	getchar();  

	return pin;  
}  

//Verify newly entered pin  
int checkPin (int i) {  

	int check = 0;  
	
	printf("Confirm your new pin: ");  
	while((scanf("%d", &check)) != EOF) {  
		if (check != i) printf("Mismatch! Confirm your new pin: ");  
		else if (check == i) { 
			printf("Success! Your new pin is %d. What would you like to do next? (V)iew your saved pins, (S)ave a new pin or (E)xit: ", i);  
			goto EXIT;  
		}  
	}  
EXIT:	return i;  
}  

//TODO  
//Error handling (overflow, input data type, other?)  
you are viewing a single comment's thread
view the rest of the comments
[โ€“] pelya@lemmy.world 2 points 2 days ago

scanf gives me shivers. Please use -Werror=format compiler flag to catch dumb errors that will make your code crash in mysterious ways.