C # первый элемент строки отсутствует - PullRequest
3 голосов
/ 05 декабря 2011

Я написал программу, которая вычисляет разницу двух строк или вычисляет расстояние Хэмминга.

Я бегу в режиме отладки. И я увидел, что у string first отсутствует первый элемент строки. Но string second это хорошо!

Когда я проверял, длина первого и второго равны.

Forexample: Я набрал это: 00011 И в режиме отладки это значение только: 0011 , Или я набрал это: «это», при отладке реальное значение только «его» * ​​1013 *

Кто-нибудь может объяснить мне, почему отсутствует первый элемент строки?

Код:

    while (Console.Read() != 'X')
    {
            string first = Console.ReadLine();
            string second = Console.ReadLine();

            int distance = 0;

            for (int i = 0; i < first.Length; i++)
            {
                if (first[i]!= second[i])
                {
                    ++distance;
                }
            }
            Console.WriteLine("Hamming distance is {0}.", distance);
        }

Я пытался изменить итерацию, например, цикл был ++ i или первый [i-1], но это не решило мою проблему.

Ответы [ 4 ]

6 голосов
/ 05 декабря 2011

Console.Read() читает первый символ из буфера. Этот персонаж не будет включен в ReadLine().

Я бы лично нашел лучший способ завершить вашу программу, например first=="quit" или каким-либо другим синтаксическим способом.

0 голосов
/ 11 июня 2015

У меня такая же проблема в vb.net, и я обнаружил, что она вызывается "console.readkey ()" .Консоль должна читать только по одному за раз. У вас есть несколько функций чтения одновременно.

как Readkey () в main () и readline () в Background.thread ...

0 голосов
/ 28 марта 2015
using System;
using System.Collections.Generic;

using System.Text;
using System.IO;

namespace_File_Handling
{

    class Program
    {
        static void Main(string[] args)
         {

            string path = @"E:\File.txt";
            StreamReader r1 = new StreamReader(path);
            string m = r1.ReadToEnd();
            Console.WriteLine(m);
            Console.ReadKey();
            r1.Close();
            StreamWriter wr = File.AppendText(path);
            string na = Convert.ToString(Console.ReadLine());
             wr.WriteLine(na);
            wr.Close();
            Console.WriteLine(na);
            Console.ReadKey();

            StreamReader rd = new StreamReader(path);
            string val = rd.ReadToEnd();
            Console.WriteLine(val);

            rd.Close();
            Console.ReadKey();


        }
    }
}
0 голосов
/ 05 декабря 2011

Вы используете первый символ с помощью Console.Read (), поэтому он не будет отображаться первым:

string first = Console.ReadLine();
while ((first != null) && (first[0] != 'X'))
{            
        string second = Console.ReadLine();

        int distance = 0;

        for (int i = 0; i < first.Length; i++)
        {
            if (first[i]!= second[i])
            {
                ++distance;
            }
        }
        Console.WriteLine("Hamming distance is {0}.", distance);
        first = Console.ReadLine();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...