Hi all,
I am a beginner of C++ and I don't know many things. I happens to encounter a simple problem which I don't know how to solve. Please help me out.
I intended to write a program that solve the following problem:

Problem A
Hashmat the brave warrior
Input: standard input
Output: standard output

Hashmat is a brave warrior who with his group of young soldiers moves from one place to another to fight against his opponents. Before fighting he just calculates one thing, the difference between his soldier number and the opponent's soldier number. From this difference he decides whether to fight or not. Hashmat's soldier number is never greater than his opponent.

Input
The input contains two integer numbers in every line. These two numbers in each line denotes the number of soldiers in Hashmat's army and his opponent's army or vice versa. The input numbers are not greater than 2^32. Input is terminated by End of File.

Output
For each line of input, print the difference of number of soldiers between Hashmat's army and his opponent's army. Each output should be in seperate line.

Sample Input:
10 12
10 14
100 200

Sample Output:
2
4
100

This line,
"Input is terminated by End of File."
Because as it said so it will use standard input, I wonder how can we catch this end of file to signify end of program?
I browse some EOF thing of C++, all they involve file operation.
While in this case we do not know the name of the input file,
and the input is from std in.

What can I do?

Thanks all!

Best Wishes,
Raymond

Dani AI

Generated

This is the classic UVA problem "Hashmat the Brave Warrior" (input ends at EOF; numbers up to 2^32). is right to point out that the program should read from standard input until extraction fails; below is a concise, safe pattern and a few practical notes. (onlinejudge.org)

Use a loop that tries to extract the two numbers on each iteration and stop when extraction fails. Read into a 64-bit integer type (the inputs can exceed 32-bit) and compute the absolute difference by subtracting the smaller from the larger to avoid underflow. Example:

#include <iostream>
#include <cstdint>

int main() {
    std::uint64_t a, b;
    while (std::cin >> a >> b) {
        std::cout << (a > b ? a - b : b - a) << '\n';
    }
}

The loop ends when formatted extraction fails (EOF or invalid input), so the same code works whether stdin is redirected from a file or entered interactively. For details on the extraction operator behaviour see cppreference. (en.cppreference.com)

Why 64-bit? The problem allows values up to 2^32, so 32-bit signed types are not safe; use long long, unsigned long long or std::uint64_t. Using the conditional (a > b ? a - b : b - a) avoids signed/unsigned pitfalls you might hit with abs or naive subtraction. (algorithmist.com)

If testing interactively, remember terminals and IDEs differ: Unix-like terminals typically use the VEOF control (default Ctrl+D) and Windows consoles historically use Ctrl+Z (behavior can require Enter or differ under some shells/IDEs). If an IDE console swallows the control key, test with input redirection from a file instead. (docs.oracle.com)

Recommended Answers

All 2 Replies

how can we catch this end of file to signify end of program?

On Windows you can use the Ctrl+Z key combination to signal end-of-file. On POSIX systems you can use Ctrl+D. In code, it's pretty much the same pattern as with files:

int num;

// Read numbers until EOF
while (cin>> num)
{
    cout<< num <<'\n';
}

EDIT----------POST doesnt provide any help. Please Omit -------EDIT

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.