为什么我的for循环在最后一个索引之前停止?

时间:2017-01-19 20:45:11

标签: c#

我想阅读20个项目,但只有19个通过控制台读取。知道为什么吗?

我希望我的代码可以做的是:

  • 1st:从标准输入缓冲区(控制台)读取整数k
  • 第二:将20个整数读入数组<?php $access_token =""; //Token $verify_token = ""; //Verify Token $hub_verify_token = null; if(isset($_REQUEST['hub_challenge'])) { $challenge = $_REQUEST['hub_challenge']; $hub_verify_token = $_REQUEST['hub_verify_token']; } if ($hub_verify_token === $verify_token) { echo $challenge; } $input = json_decode(file_get_contents('php://input'), true); $sender = $input['entry'][0]['messaging'][0]['sender']['id']; $message = $input['entry'][0]['messaging'][0]['message']['text']; $message_to_reply = "Huh? You are talking to me?"; $url = 'https://graph.facebook.com/v2.6/me/messages?access_token='.$access_token; //Initiate cURL. $ch = curl_init($url); //The JSON data. $jsonData = '{ "recipient":{ "id":"'.$sender.'" }, "message":{ "text":"'.$message_to_reply.'" } }'; //Encode the array into JSON. $jsonDataEncoded = $jsonData; //Tell cURL that we want to send a POST request. curl_setopt($ch, CURLOPT_POST, 1); //Attach our encoded JSON string to the POST fields. curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded); //Set the content type to application/json curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); //Execute the request if(!empty($input['entry'][0]['messaging'][0]['message'])){ $result = curl_exec($ch); } ?>

    int x[]

1 个答案:

答案 0 :(得分:2)

Jon在评论中解决了问题的根源,但我想尝试更充分地回答。 Console.Read()只会读取一个字符并返回一个表示该字符的整数,可能不是您想要的。之后的任何字符都会在第一遍中被立即读取,可能不是您所期望的。可以通过检查值来说明问题:

static void Main(string[] args)
    {
        int k;
        int[] x = new int[20];
        int[] y = new int[20];
        int[] yval = new int[20];
        int i;

        Console.WriteLine("Enter k value");
        k = Console.Read();
        Console.WriteLine("k = {0}", k);

        Console.WriteLine("Enter x values\n ");
        for (i = 0; i <= 19; i += 1)
        {
            var input = Console.ReadLine();
            x[i] = int.Parse(input);
            yval[i] = (x[i] + k) % 26;

            Console.WriteLine("x[{0}] = {1}", i, x[i]);
        }

        Console.WriteLine("Press any key...");
        Console.ReadKey();
    }

如果为k输入“12”,则输出如下:

Enter k value
12
k = 49
Enter x values

x[0] = 2

第一个字符'1'保存为kint值为49('1'的ASCII值)。缓冲区仍然有'2'和要读取的换行符。它们在第一次通过循环时被读取并存储在数组的第一个元素中。

正如乔恩所说,你可能想要k = int.Parse(Console.ReadLine());