1. 程式人生 > 程式設計 >C# 控制檯實現一次性輸入多行的操作

C# 控制檯實現一次性輸入多行的操作

推薦使用第二種方法。

1、使用StringBuilder儲存:按下q鍵時退出

StringBuilder sb = new StringBuilder();
 
while (true)
{
 string input = Console.ReadLine();
 if (input.Equals("q") == false) //如果輸入的不是q(區分大小寫),則增加記錄
  sb.AppendLine(input);
 else
  break; //如果該行僅僅輸入q,則結束輸入
}
 
Console.WriteLine("按輸入方式輸出(不會有最後的退出符號q,而是一個空行):");
Console.WriteLine(sb.ToString());
 
Console.WriteLine("輸入資料的長度:"); //回車佔據兩個字元
Console.WriteLine(sb.Length); //結果說明資料是以字元形式存入StringBuilder中,回車為2個字元
 
Console.WriteLine("逐個輸出(不會有最後的退出q符號,而是一個空行):");
for (int i = 0; i < sb.Length; i++)
{
 Console.WriteLine(sb[i]); //為char型別
}
 
//依次輸出每一行和每個值
List<string> line = new List<string>();
int k = 0;
for (int i = 0; i < sb.Length - 1; i = i + 2) //當i為\r時,i+1是\n,下一次的迴圈是i+2開始
{
 string a = "";
 while (sb[i].ToString() + sb[i + 1].ToString() != "\r\n") //判斷當前字元和下一個字元是不是回車符\r\n
 {
  a = a + sb[i++].ToString(); //每行為一個字串
 }
 line.Insert(k++,a); //將字串依次存入連結串列
}
Console.WriteLine("依次輸出每行");
for (int i = 0; i < line.Count; i++)
{
 Console.WriteLine(line[i]);
}
Console.WriteLine("依次輸出每個值");
string[][] str = new string[line.Count][]; //交叉陣列,行固定,為上面得到的行數,每一行的長度不定(每行字元間以空格或其他分割)
for (int i = 0; i < line.Count; i++)
{
 str[i] = line[i].Split(); //C#對空格的分割方式之一,如果是其他分割方式,就需要也使用上面的連結串列分割每行的方式了
}
for (int i = 0; i < line.Count; i++)
{
 for (int j = 0; j < str[i].Length; j++)
 {
  Console.WriteLine(str[i][j]);
 }
}
Console.ReadKey();

注意,輸入值後它是以char存在於StringBuilder中,回車佔兩個char值。

C# 控制檯實現一次性輸入多行的操作

2、使用連結串列List儲存:按下q時退出

List<string> str = new List<string>();
int len = 0;
while (true)
{
 string input = Console.ReadLine();
 if (input.Equals("q") == false) //如果輸入的不是q(區分大小寫),則增加記錄
  str.Insert(len++,input);
 else
  break;
}
   
Console.WriteLine("輸出資料長度");
Console.WriteLine(len); //結果說明資料是按行存在連結串列中的,每行佔連結串列一個值
Console.WriteLine("依次輸出連結串列中資料");
for (int i = 0; i < len; i++)
{
 Console.WriteLine(str[i]); //依次輸出連結串列每個值,也是依次輸出每行
}
Console.WriteLine("依次輸出每個值");
string[][] every = new string[len][]; //交叉陣列,行固定,為上面得到的行數,每一行的長度不定(每行字元間以空格或其他分割)
for (int i = 0; i < len; i++)
{
 every[i] = str[i].Split(); //C#對空格的分割方式之一,如果是其他分割方式,就需要也使用上面的連結串列分割每行的方式了
}
for (int i = 0; i < len; i++)
{
 for (int j = 0; j < every[i].Length; j++)
 {
  Console.WriteLine(every[i][j]);
 }
}
Console.ReadKey();

C# 控制檯實現一次性輸入多行的操作

從上面兩個方法來看,第二個方法更方便對輸入資料取出操作。

補充:C語言一次性給多個變數賦值

我就廢話不多說了,大家還是直接看程式碼吧~

scanf("%d%d%d",a,b,c);

而不是

scanf("%d,%d,%d",c);

這裡要注意那裡是沒有逗號的

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。