上面的程序是可以的啊,在我这里完全通过了。
可以是你输出的问题。
下面是我测试的程序:
char[] c=new char[5];
c[0]='3';
string s="";
string tmp=new string(c);
for(int i=1;i<5;i++)
{
s+=tmp;
Console.WriteLine(s);
}
Console.ReadLine();
可以是你输出的问题。
下面是我测试的程序:
char[] c=new char[5];
c[0]='3';
string s="";
string tmp=new string(c);
for(int i=1;i<5;i++)
{
s+=tmp;
Console.WriteLine(s);
}
Console.ReadLine();
string tmp = new string(c);
由于在C#中初始化字符数组时没有付值的元素将自动为'\0'
于是,tmp的内容变为 "3\0\0\0\0"
并且,由于实列化为由指向5位有字符数组(c)的指针指示的值,所以tmp中'3'后面的4个'\0'不能被自动忽略!
而循环后s的内容变为"3\0\0\0\03\0\0\0\03\0\0\0\03\0\0\0\0"
当然显示为 3。又如:
string s;
s = "3";
s += '\0';
s += "3";
此时s显示为"3"。你可以使用string的另一个构造函数:
public String(char*, int, int);
将tmp的初始化改为string tmp = new string(c, 0, 1); //只取第一个元素
你编译试过了吗?开始我也是这样想的,可是他那个程序在我这里通过了。你说改成string tmp = new string(c, 0, 1)里面的c是字串类型啊,这是从串取字符函数。我也知道啊。
{
s+=tmp;
Console.WriteLine(s); // 这一句有问题
} 变成了累积显示 s 的值,每次s的值都是"3"循环以后当然是"3333"你可以这样式式
把Console.WriteLine(s); 移到循环外:
for(int i=1;i<5;i++)
{
s+=tmp;
}
Console.WriteLine(s); // 移到循环外
Console.WriteLine(s)是打印行啊,所以不会重叠显示的,在循内时,我编译运行结果是:3
3 3
3 3 3
3 3 3 3
如果把它移到循环外,则只显示:3 3 3 3
我用的是5张碟的Enterprise Archtect英文版,你运行的结果真的不是这样吗?