C控制台 - 分隔不同的值

时间:2016-04-09 11:26:57

标签: c console

我是编程新手,我正在网上尝试不同的活动来掌握它。 我遇到了一个特定问题的问题,我想创建一个程序,用户输入一个值并打印一个特定的字符串。 例如,当用户输入0时,它将打印字符串'black',输入1将打印字符串'brown',如下图所示:

enter image description here

我的问题是我希望用户输入一个像012这样的值,然后用空格打印“黑色,棕色,红色”。我开始做以下事情:

#include <stdio.h>
#include <stdlib.h>

int colours(int t){
    if(t == 0){
        printf("black");
    }
    else if(t == 1) {
        printf("brown");
    }
    else if (t == 2) {
        printf("red");
    }
    else if(t == 3) {
        printf("orange");
    }
     else if(t == 4) {
        printf("yellow");
    }
     else{
        printf("incorrect colour number");
     }
    return;
}

int main()
{
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    printf("colour code"", colours(n));
    return 0;
}

如何一次打印多种颜色?我不是要求代码我只需要提示使用什么,我不确定使用IF语句对于这个问题是否正确?

2 个答案:

答案 0 :(得分:0)

要“分解”用户输入,您可以尝试将其作为字符串,一个字符表接收。

char* input = ( char* ) malloc( sizeof( char ) * maxlength + 1 ); // allocate a char table to store user input, maxlength being the maximum length you expect.
scanf("%s", input);

注意1:您必须将1加到您希望从用户输入接收的最大长度,因为scanf需要多一个char来添加字符\0以终止该字符串。 /> 注意2:\0字符也称为NULL-terminator

然后你会看到如下字符串:

for( int i = 0 ; i < strlen( input ) ; i++ )
{
     colours( input[ i ] );
}

注1:您必须#include <string.h>才能使用strlen 注意2:您可能必须使用:colours将您的char转换为int以将其传递给colours( ( int ) input[ i ] );
注3:将char转换为int可以获得char的ASCII值。

使用每个char的{​​{3}}(查找数字)来识别和打印它们。因此,您可以使用以下两种方法之一进行测试:

void colours( int t )  // as mentioned in the comments, you do not have to return something.
{
    switch( t ) 
    {
        case 49: // ASCII code of 1
            printf("brown\n");
            break;

        // ... other cases

        default:  // Don't forget the default statement
            printf("incorrect colour number\n");
            break;
    }
}

或:

switch( t - (int) '0' ) // (ASCII code of t - ASCII code of '0') gives you the number given by the user, as an int
{
    case 1: // 
        printf("brown\n");
        break;

    // ... other cases

    default:
        printf("incorrect colour number\n");
        break;
} 

正如其他人在评论中所说的那样,当你必须连续两次else if时,最好使用switch case语句。

最后,不要忘记释放手动分配的内存,这样就不会有内存泄漏:

free( input );

答案 1 :(得分:0)

首先,我建议你宣布你的颜色&#34;作为一个void类型,因为它不需要返回任何东西(void colours(int t){)。

这是我解决这个问题的方法:

初始化一个数组,该数组将存储来自用户输入的字符串(例如123 )。然后将数组传递给函数( google this,因为它不像传递整数那么简单)。然后创建一个循环,循环遍历数组,直到它到达它的末尾,并为每次传递打印一个给定的颜色。 (例如。array[0]为1,因此打印棕色array[1]为2,因此打印红色array[2]为3,所以打印橙色)。