www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Erratic printf and writef behavior

reply john C <john_member pathlink.com> writes:
Hi All

I'm new to the D language and I'm running into really confounding problems with
my sudoku solver.  Here's the part of my program where writef and printf stop
working:

void reduce_possibilities(char puz[9][9],bit poss[9][9][10])
{
int i,j,k;

writefln("reduce possiblilities called");
for(i=0;i<9;i++)   //printf() stops working in this loop!
{
for(j=0;j<9;j++)
{
for(k=0;k<10;k++)
{
poss[i][j][k]=1;
}
}
}
writefln("test");
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(puz[i][j]!='0')
{
reduce_known(poss,i,j,(cast(int)(puz[i][j]))-48);
reduce_column(poss,i,j,(cast(int)(puz[i][j]))-48);
reduce_row(poss,i,j,(cast(int)(puz[i][j]))-48);
reduce_block(poss,i,j,(cast(int)(puz[i][j]))-48);
}
}
}
writefln("leaving reduce possiblities method");
}




The program prints the method called message, but in the following loops the io
gets messed up somehow (the "test" message does not print).  Instead, the
program prints mostly white space and some funny characters ie smiley face,
spade, etc, then it prints an error message which says "Error: 4invalid UTF-8
sequence".  Can anybody help me out here?  D isn't much use to me if the print
statements aren't reliable, but I would love to keep working with it.  Can
anyone help me out?  Thanks

John C
Jan 31 2006
next sibling parent Derek Parnell <derek psych.ward> writes:
On Wed, 1 Feb 2006 05:02:21 +0000 (UTC), john C wrote:

 Hi All
 
 I'm new to the D language and I'm running into really confounding problems with
 my sudoku solver.  Here's the part of my program where writef and printf stop
 working:
 
 void reduce_possibilities(char puz[9][9],bit poss[9][9][10])
 {
 int i,j,k;
 
 writefln("reduce possiblilities called");
 for(i=0;i<9;i++)   //printf() stops working in this loop!
 {
 for(j=0;j<9;j++)
 {
 for(k=0;k<10;k++)
 {
 poss[i][j][k]=1;
 }
 }
 }
 writefln("test");
 for(i=0;i<9;i++)
 {
 for(j=0;j<9;j++)
 {
 if(puz[i][j]!='0')
 {
 reduce_known(poss,i,j,(cast(int)(puz[i][j]))-48);
 reduce_column(poss,i,j,(cast(int)(puz[i][j]))-48);
 reduce_row(poss,i,j,(cast(int)(puz[i][j]))-48);
 reduce_block(poss,i,j,(cast(int)(puz[i][j]))-48);
 }
 }
 }
 writefln("leaving reduce possiblities method");
 }
 
 The program prints the method called message, but in the following loops the io
 gets messed up somehow (the "test" message does not print).  Instead, the
 program prints mostly white space and some funny characters ie smiley face,
 spade, etc, then it prints an error message which says "Error: 4invalid UTF-8
 sequence".  Can anybody help me out here?  D isn't much use to me if the print
 statements aren't reliable, but I would love to keep working with it.  Can
 anyone help me out?  Thanks
 
 John C
It sounds like you are trying to display characters in the ranges 0x00 - 0x1F. Are you mixing up the character '1' with the integer 1? ASCII character '1' has the integer value of 49. -- Derek (skype: derek.j.parnell) Melbourne, Australia "Down with mediocracy!" 1/02/2006 4:52:50 PM
Jan 31 2006
prev sibling parent MicroWizard <MicroWizard_member pathlink.com> writes:
Please include real and complete source snippets,
but try to reduce it to the smallest size where
the problem is reproducible.

It sounds like you have mixed up printf's and writef's format specifiers.
When you use printf with D strings and "%s" it will show garbage since
D strings are not terminated with 0.
With printf and D string you have to specify "%.*s"
When you use writef, the "%s" has different meaning but it should work.

Tamás Nagy
MicroWizard

In article <drpfct$2q1f$1 digitaldaemon.com>, john C says...
Hi All

I'm new to the D language and I'm running into really confounding problems with
my sudoku solver.  Here's the part of my program where writef and printf stop
working:

void reduce_possibilities(char puz[9][9],bit poss[9][9][10])
{
int i,j,k;

writefln("reduce possiblilities called");
for(i=0;i<9;i++)   //printf() stops working in this loop!
{
for(j=0;j<9;j++)
{
for(k=0;k<10;k++)
{
poss[i][j][k]=1;
}
}
}
writefln("test");
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(puz[i][j]!='0')
{
reduce_known(poss,i,j,(cast(int)(puz[i][j]))-48);
reduce_column(poss,i,j,(cast(int)(puz[i][j]))-48);
reduce_row(poss,i,j,(cast(int)(puz[i][j]))-48);
reduce_block(poss,i,j,(cast(int)(puz[i][j]))-48);
}
}
}
writefln("leaving reduce possiblities method");
}




The program prints the method called message, but in the following loops the io
gets messed up somehow (the "test" message does not print).  Instead, the
program prints mostly white space and some funny characters ie smiley face,
spade, etc, then it prints an error message which says "Error: 4invalid UTF-8
sequence".  Can anybody help me out here?  D isn't much use to me if the print
statements aren't reliable, but I would love to keep working with it.  Can
anyone help me out?  Thanks

John C
Feb 01 2006