关于#c++#的问题:为什么只能输入pt数组的值,但是不能输入key数组的值

为什么只能输入pt数组的值,但是不能输入key数组的值,运行出来的结果也不对

img


```c++
#include<stdio.h>
#include<stdint.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

int main()
{
    uint8_t key[16] = { 0 };//
    uint8_t pt[16] = { 0 };  // 0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31, 0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34
    uint8_t ct[16] = { 0 };     // 保存加密后的数据
    uint8_t plain[16] = { 0 };  // 保存解密后的数据

    cout<<"请输入要加密的明文(16进制 16个8b):"<<"";
    for (int i = 0; i < 16; i++)
    {
        cin >> hex >> pt[i];
    }
        

    cout << "明文为:" << " ";
    for (int i = 0; i < 16; i++)
    {
        cout << hex << int(pt[i]) << ' ';
    }
        
      cout<<endl;

    cout << "请输入密钥(16进制 16个8b):" <<"";
    for (int i = 0; i < 16; i++)
    {
        cin >>hex>>key[i];
    }
        

    cout << "密钥为:" << " ";
    for (int i = 0; i < 16; i++)
    {
        cout << hex << int(key[i]) << ' ';
    }
        
    cout << endl;
  
}


程序中cin的输入这里是有问题的,给你修改为scanf了,具体代码如下,看能否满足你的需求:

#include<stdio.h>
#include<stdint.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
 
int main()
{
    uint8_t key[16] = { 0 };//
    uint8_t pt[16] = { 0 };  // 0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31, 0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34
    uint8_t ct[16] = { 0 };     // 保存加密后的数据
    uint8_t plain[16] = { 0 };  // 保存解密后的数据
 
    cout<<"请输入要加密的明文(16进制 16个8b):"<<"";
    cout<<endl;
    int i;
    for (i = 0; i < 16; i++)
    {
        //cin >> hex >> pt[i];
        scanf("%02x", &pt[i]);
    }
        
 
    cout << "明文为:" << " ";
    for (i = 0; i < 16; i++)
    {
        cout << hex << int(pt[i]) << ' ';
    }
        
    cout<<endl;
 
    cout << "请输入密钥(16进制 16个8b):" <<"";
    cout<<endl;
    for (i = 0; i < 16; i++)
    {
        //cin >> hex >>key[i];
        scanf("%02x", &key[i]);
    }
        
 
    cout << "密钥为:" << " ";
    for (int i = 0; i < 16; i++)
    {
        cout << hex << int(key[i]) << ' ';
    }
        
    cout << endl;
  
}

你都没用到ct 怎么输入

你怎么输入的,截图看看

输入有问题,专门跑了一下代码,这样输入会发现每次都只能读取一个数据即为“0”,“x”,“3”...这样,所以说会发现输入缓存区中仍有大量数据
你可以每次输入之后立即按enter,这样就不会错