tags:

views:

153

answers:

4

I am really new programming in C. How can I do the same in C, maybe in a more simple way than the one I do in Java?

Each line of the input has two integers: X and Y separated by a space.

12 1
12 3
23 4
9 3

InputStreamReader in = new InputStreamReader(System.in);
BufferedReader buf = new BufferedReader(in);

int  n;
int k;

double sol;
String line =""; 
line=buf.readLine();

while( line != null && !line.equals("")){
    String data [] = line.split(" ");
    n = Integer.parseInt(data[0]);          
    k = Integer.parseInt(data[1]);
    calculus (n,k);
    line = buf.readLine();

}

A: 
fscanf(filehandle, "%d %d\n", n, k);
Amadan
shouldn't work as expected because `fscanf()` skips whitespace
Christoph
A: 

The file variable is called FILE

To open a file use fopen()

Reading and writing are done with fgets() and fputs()

This is all in stdio.h.

Example:

#include <stdio.h>

int main(){
    FILE *input = fopen("file.txt", "r");
    char text[100]; // Where we'll put our text we read
    fgets(text, 100, input); // Get up to 100 chars, stops at the first newline
    puts(text); // In your example, this should print out "12 1"
    fgets(text, 100, input); // Get the next up to 100 chars
    puts(text); // Prints "12 3"
    return 0;
}

Let me know if there's anything wrong with the code, I don't have a C compiler with me.

Brendan Long
A: 

No compiler, so please fix as needed. Also the variable decalrations are C++ style

#include <stdio.h>

...

while (!feof(stdin)) {
    int n = 0, k = 0;
    if (scanf("%d %d\n", &n, &k) != 2) continue;
    // do something with n and k
}

C++ solution (with streams) may be simpler still

Arkadiy
This must be a first (certainly a first for me!) - a -1 answer accepted. @peiska - thanks :)
Arkadiy
+1  A: 

Use fgets() to read a line of text and sscanf() to parse it:

#include <stdio.h>

int main(void)
{
    int n, k;
    char line[64]; // adjust size as necessary

    while(fgets(line, sizeof line, stdin) && sscanf(line, "%d %d", &n, &k) == 2)
        printf("n=%d, k=%d\n", n, k); // dummy code

    return 0;
}

Using scanf() alone to read directly from stdin might be possible with scansets, but it's not as easy as it looks because whitespace characters (including newlines) are skipped.

Christoph