Hello, i've hit some roadblocks while trying to learn D, i'll try to explain each of them below :

1: Why does using readf in a function causes readln in following functions to "skip"(or do as if i had pressed enter?)
Here's an example code(excuse me if it doesn't appear formatted) :

import std.stdio;
import std.string;

void main() {
        ubyte menuint;
        writeln("test");
        readf(" %s", &menuint);
        if (menuint == 1) {
                foo();
        } else {
                bar();
        }
}

void foo() {
        string a = strip(readln());
        writeln(a);
}

void bar() {
        string b = strip(readln());
        writeln(b);
}
The code after the readf function just prints two newlines without even asking for input.


2: Why can i do whatever to strings that represents filenames but using stdin for filenames with (strip(readln()) always causes a "No such file or directory" error?

I've tried the same with chop(readln()), the test file is named "TEST.TXT" and while using ''' File file = File("TEST.TXT", "r") ''' works, but doing the same with a variable that contains the same exact filename obtained with <<std.string.strip(readln())>> or <<std.string.chop(readln())>> always causes a "No such file or directory" error. I've tried to make it print the read filename before and it visually appears to be the exact same. I'm on Windows in case this is a compatibility problem and it works as expected on everything else.

3: How can files be accessed once opened with read access?(as described in Ali Çehreli's Programming in D, chapter 19) Am i right when assuming they are just void[] arrays that can be "casted" to another array type(if appropriate within current context) resulting in what's called a buffer? I'm asking because i've been trying to make a simple program with std.zlib that uncompresses/compresses all zlib files that follow a certain name pattern, only problem is that apparently the std.file.write function doesn't pass compilation because it can't use anything that has "File" in its type, what am i supposed to do then?(the exact error is "template std.file.write cannot deduce function from argument types !()(File, void[])", i got the same error with the std.stdio.write function)

Here's the code in question that i have trouble with :
                if (exists(filename)) {
                        writeln("file found!");
                        File efile = File(filename, "r");
                        File rawfile = File(filename ~ ".out", "w");
                        void[] efile_buf1 = lire(filename); // alias for 
std.file.read
                        ubyte[] efile_buf2 = cast(ubyte[]) efile_buf1;
rawfile.écrire(uncompress(efile_buf2)); // alias for std.file.write
                        succ(namecounter);


Thanks to everyone in advance.

Reply via email to