Validate a Complete Record
Validate a Complete Record
Parsing a number and validating its allowed range are separate jobs.
The school must also decide whether extra trailing text is acceptable rather than silently ignoring it.
Before this lesson, review Read and Write a Report File when needed.
What you’ll learn
- Use streams and validation to validate a Complete Record.
- Explain how the complete example produces false.
- Make the practice change and explain why the result changes or stays the same.
Follow a complete C++ example
The school must also decide whether extra trailing text is acceptable rather than silently ignoring it.
Read the declarations above main before tracing its statements. Each declared name supplies the value, type or operation used later. The std:: prefix selects a name from the standard library, and cout << sends a value to the output stream.
C++17 · main.cpp · complete program
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::istringstream input("72 absent");
int marks {
}
;
std::string extra;
bool valid = static_cast<bool>(input >> marks) && marks >= 0 && marks <= 100 && !(input >> extra);
std::cout << std::boolalpha << valid << '\n';
return 0;
}
Expected output
falseRun in C++ compiler →Connect the code to its result
C++17 · source used in this explanation
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::istringstream input("72 absent");
int marks {
}
;
std::string extra;
bool valid = static_cast<bool>(input >> marks) && marks >= 0 && marks <= 100 && !(input >> extra);
std::cout << std::boolalpha << valid << '\n';
return 0;
}
Expected output
falseParsing a number and validating its allowed range are separate jobs. The school must also decide whether extra trailing text is acceptable rather than silently ignoring it.
Trace the result: Read the complete program below from its starting values to the output operations. Each std::cout statement displays the value supplied at that point; \n begins the next line. The resulting lines, in order, are false. In this example, distinguish what the program calculates or changes from what it actually displays.
Important mistakes and boundaries
Stream failure is state that must be handled before further extraction. This teaching parser validates one number, not a complete CSV format.
Change the school example
C++17 · edit this complete example
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::istringstream input("72 absent");
int marks {
}
;
std::string extra;
bool valid = static_cast<bool>(input >> marks) && marks >= 0 && marks <= 100 && !(input >> extra);
std::cout << std::boolalpha << valid << '\n';
return 0;
}
Your task: Use the input text 72 alone. Before running your edited program, predict the new output and explain which stored value, condition or object changes. Keep the rest of the example intact.
Use the complete source repeated here; this task does not depend on remembering code from another section.
Worked answer and reasoning
Worked variation: Use the input text 72 alone. The validation result becomes true.
Parsing a number and validating its allowed range are separate jobs. The school must also decide whether extra trailing text is acceptable rather than silently ignoring it.
Stream failure is state that must be handled before further extraction. This teaching parser validates one number, not a complete CSV format.
For a baseline run, save this source as main.cpp and use clang++ -std=c++17 -Wall -Wextra -pedantic main.cpp -o school, or equivalent g++ flags. Recompile after editing so that you run the updated executable.
The source and output below belong to the edited program. Compare them with the original example to see the consequence of this single change.
C++17 · worked variation · complete program
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::istringstream input("72");
int marks {
}
;
std::string extra;
bool valid = static_cast<bool>(input >> marks) && marks >= 0 && marks <= 100 && !(input >> extra);
std::cout << std::boolalpha << valid << '\n';
return 0;
}
Expected output
trueRun in C++ compiler →Check your understanding
C++17 · original program for this question
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::istringstream input("72 absent");
int marks {
}
;
std::string extra;
bool valid = static_cast<bool>(input >> marks) && marks >= 0 && marks <= 100 && !(input >> extra);
std::cout << std::boolalpha << valid << '\n';
return 0;
}
What to remember
Parsing a number and validating its allowed range are separate jobs. Stream failure is state that must be handled before further extraction. This teaching parser validates one number, not a complete CSV format.
Useful connections: Read and Write a Report File, Give a Task a Name.
Language and design guidance: C++ Core Guidelines and C++ working draft. The draft describes an evolving language; these examples deliberately target C++17.
Reaching the recap and completing the quizzes are separate milestones.