как сделать BufferedReader в C - PullRequest
0 голосов
/ 03 июня 2010

Я действительно новое программирование на C. Как я могу сделать то же самое на C, возможно, более простым способом, чем тот, который я делаю на Java?

Каждая строка ввода имеет два целых числа: X и Y, разделенные пробелом.

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();
}

Ответы [ 4 ]

1 голос
/ 03 июня 2010

Используйте fgets() для чтения строки текста и sscanf() для ее анализа:

#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;
}

Использование только scanf() для чтения непосредственно из stdin возможно с помощью наборов сканеров, но это не так просто, как кажется, потому что пропускаются пробельные символы (включая символы новой строки).

0 голосов
/ 03 июня 2010

Файловая переменная называется FILE

Чтобы открыть файл, используйте fopen()

Чтение и запись выполняются с fgets() и fputs()

Это все в stdio.h.

* * Пример тысяча двадцать-один: * * 1 022
#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;
}

Дайте мне знать, если что-то не так с кодом, у меня нет с собой компилятора C.

0 голосов
/ 03 июня 2010

Нет компилятора, поэтому, пожалуйста, исправьте при необходимости. Также переменные decalrations в стиле C ++

#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 ++ (с потоками) может быть еще проще

0 голосов
/ 03 июня 2010
fscanf(filehandle, "%d %d\n", n, k);
...