簡體   English   中英

根據C中的char值分配char數組

[英]Assigning char array based on the value of char in C

我試圖通過取決於char的值的條件來分配char數組(或字符串)的特定值。

假設c是在代碼之前聲明的char,具有某種特定值。

  char fruit[];
  if (c == 'R') {
    fruit[] = "Red";
  }
  else if (c == 'Y') {
    fruit[] = "Yellow";
  }
  else if (c == 'G') {
    fruit[] = "Green";
  }
  else if (c == "B") {
    fruit[] = "Blue";
  }

這段代碼顯然是錯誤的,但是應該讓我對自己的想法有所了解。

我或者打算為一個簡單的程序使用一個正確的版本,或者不得不經歷大約四倍的條件來手動打印所述字符串值,這將是一個巨大的痛苦。

  char *color;   // for modern compilers, should be  const char *color
  switch (c)
  {
  case 'R':    color = "Red";       break;
  case 'Y':    color = "Yellow";    break;
  case 'G':    color = "Green";     break;
  case 'B':    color = "Blue";      break;
  default:     color = "<unknown>"; break;
  }

我對不合邏輯的變量名表示例外,因此將fruit重命名為color ,但是這種方法是實現我認為您要問的方法的一種。

最好的方法是使用switch語句,但是如果您不打算根據檢測到的字符動態分配它,則首先需要告訴編譯器您想要fruit[]

除非您要處理具有長名稱的顏色的水果,否則我會說16個字符就足以進行演示。 因此:

#include <stdio.h>
#include <string.h>

void fruity_printer(char c) {
    char fruit[16] = { 0 }; // initialize your arrays!

現在,關於char c的簡單switch語句

    switch (c) {
         case 'R':
            strcpy(fruit, "Red");
            break;
         // add more cases as needed

         default: // what happens if we don't have a case for it?
            strcpy(fruit, "Rainbow"); 
            break;
    }

    printf("The fruitabulous color is: %s\n", fruit);
    return;
    }

請注意,我在這里使用了strcpy() ,因為我確定我將在目標的范圍內進行編寫。 您永遠都不會像在編譯時那樣隨意復制長度未知的內容,而應使用strncpy() ,它會使用另一個長度參數。

您還需要做的是將果味打印機中的c轉換為高位或低位,因此您不必處理這兩種情況。

另一種方法是動態分配內存,但是僅使用一個簡單的開關就可以最好地解決弄清楚內存應該是什么的語義。

您可以使用switch例:

#include<stdio.h>
#include<string.h>

int main (int argc, char *argv[])
{
      char c;
      char fruit[100];
      printf("Enter the character: ");
      scanf(" %c",&c);
      switch(c)
      {
          case 'R' : strcpy(fruit,"Red"); break; 
          case 'Y' : strcpy(fruit,"Yellow"); break; 
          case 'G' : strcpy(fruit,"Green"); break; 
          case 'B' : strcpy(fruit,"Blue"); break; 
          default : puts("No color");
      }
      printf("%s\n",fruit);
 }

暫無
暫無

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

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