簡體   English   中英

輸入為字符數組

[英]Inputting as a Char Array

我試圖獲取輸入作為字符數組並對其進行操作。 例如,這就是我所擁有的。 但是我剛開始使用數組,我對如何存儲char數組感到困惑。

   void getMessage(char message[CHARACTERS])
   {
        int i = 0;
        cout << "Enter message: ";
        for (i = 0; i < CHARACTERS; i++)
        {
            cin >> message[i];
            if (message[i] == NULL)
                break;
        }
            cout << "The message you entered was:" << endl << message[i] << endl;
   }

字符等於常數100,因為我不知道數組的大小,它基於用戶輸入。 當我嘗試使數組輸出時,它沒有。

您在這里感到困惑:

if (message[i] == NULL)

在C ++中,將NULL定義為宏並將其擴展為零,因此您實際測試的是

if (message[i] == 0)

如果從終端或文本文件輸入,這幾乎是不可能的(您肯定不會以這種方式讀取二進制文件!)。 根據您的需要將其更改為以下任意一項,然后它應該可以工作。

// Input a line
if (message[i] == '\n') {
    message[i] = '\0'; // strip the newline
    break;
}
// Input until something goes wrong
if (cin.fail()) {
    message[i] = '\0';
    break;
}
// Or combine them:
if (message[i] == '\n' || cin.fail()) {
    message[i] = '\0';
    break;
}

記住終止字符串也是一種好方法,以防您讀取了所有緩沖區,並且cout會輸出零字符之前的所有內容,這可能會導致訪問沖突:

for (...) {...}
message[CHARACTERS - 1] = '\0'.

而且,您的輸出語句也是錯誤的:

cout << "The message you entered was:" << endl << message[i] << endl;

您只通過message[i]輸出一個字符 如果要輸出整個消息,請除去數組索引運算符:

... << message << ....

這樣您就可以使用ostream& operator <<(const char*)重載來輸出字符串。

因此,將所有這些放在一起,顯而易見的現代C ++實現您想要的方式是:

#include <cstddef>
#include <iostream>
#include <memory>

using std::cout;
using std::flush;
using std::endl;
using std::cin;
using std::size_t;

template <size_t CHARACTERS>
void getMessage(char(& message)[CHARACTERS]) {
  int i = 0;
  cout << "Enter message: " << flush;

  for (i = 0; i < CHARACTERS; i++) {
    if (!cin.get(message[i])
      || message[i] == '\0'
      || message[i] == '\r'
      || message[i] == '\n') {
      message[i] = '\0';
      break;
    }
  }
  cout << "The message you entered was:" << endl << message << endl;
}

int main() {
  char message[200];
  getMessage(message);
  return EXIT_SUCCESS;
}
// Example program
#include <iostream>
#include <string>

using namespace std;

const int CHARACTERS = 100;

void getMessage(char message[CHARACTERS])
   {
        int i = 0;
        cout << "Enter message: ";
        for (i = 0; i < CHARACTERS-1; i++)
        {
            message[i] = cin.get(); // cin >> message[i] can't detect enter press as was in your case, so you need to use a lower level function like cin.get()
            if (message[i] == '\n'){
                message[i+1] = '\0'; // This is a c++ marker for end of string otherwise garbage values will print
                break;
            }
        }
            cout << "The message you entered was:" << endl << message << endl; //You were printing only one letter of the message
   }

int main()
{
    char inputArray[CHARACTERS];
    getMessage(inputArray);
}

在線運行: http//cpp.sh/6rh3w

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM