如果用户输入“*”,则添加1;如果用户在C中输入“”,则添加0

时间:2016-04-04 15:11:30

标签: c arrays input char int

我需要输入用户输入(星号或空格),如果用户输入星号,我会在数组中插入1,如果用户输入空格,我会在数组中插入0。以下是我到目前为止的情况:

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

void userInput(){
    printf("Enter Generation 0 (Length must be 10, * for 1 and " " for 0):\n");
    char c;                 /* int */
    int count;
    char arr[10];
    for(int i = 0; i < 10; i++){
        scanf("%c", &c);
        if(c == '*')
            arr[i] = '1';
        else
            arr[i] = '0';
    }
    for(int j = 0; j < 10; j++){
        printf("%c", arr[j]);
    }
}

int main(int argc, const char * argv[]) {
    userInput();
}

问题是循环只允许用户输入6次字符然后打印。

输入所有*的输出:

Enter Generation 0 (Length must be 10, * for 1 and  for 0):
*
*
*
*
*
1010101010

如果输入所有空格,则输出:

Enter Generation 0 (Length must be 80, * for 1 and  for 0):





0000000000

3 个答案:

答案 0 :(得分:4)

有多种方法可以分别捕捉'*'' '并将其翻译为10。您实际上是在编写一个小的输入处理程序,它将在您的数组已满之前读取,或者用户使用 [ctrl + d] 终止输入。您只需检查以确保阵列未满,并且您尚未到达EOF。简单的事情会做:

#include <stdio.h>

#define MAXC 10

int main (void) {

    unsigned char arr[MAXC] = {0};
    int c = 0, i, idx = 0;

    while (idx < MAXC && (c = getchar()) != EOF) {
        if (c == '*') arr[idx++] = 1u;
        if (c == ' ') arr[idx++] = 0u;
    }

    for (i = 0; i < idx; i++)
        printf (" arr[%d] : %u\n", i, arr[i]);

    return 0;
}

它将采取任何形式的输入,适用于'*'' ',并在数组已满或生成EOF之前忽略其他字符:

示例使用/输出

$ ./bin/rdspcasterix
(**) (**)
  (**)
*
 arr[0] : 1
 arr[1] : 1
 arr[2] : 0
 arr[3] : 1
 arr[4] : 1
 arr[5] : 0
 arr[6] : 0
 arr[7] : 1
 arr[8] : 1
 arr[9] : 1

$ ./bin/rdspcasterix
The quick*brown fox*jumps over*a lazy*dog
**  **
 arr[0] : 0
 arr[1] : 1
 arr[2] : 0
 arr[3] : 1
 arr[4] : 0
 arr[5] : 1
 arr[6] : 0
 arr[7] : 1
 arr[8] : 1
 arr[9] : 1

没有一种正确的方法可以做到这一点,所以请查看所有答案,并选择最适合您情况的答案。

答案 1 :(得分:1)

你也可以使用带有STDIN的fgetc作为你的文件流来通过char

读取char

编辑 添加了缓冲区验证解决方案

*/10 * * * * /opt/php5.6/bin/php /homepages/9/d526231279/htdocs/cupidmemories/cronjobs/users.cron.php

答案 2 :(得分:0)

好的新代码在QT Ide Mingw编译器上测试了很好用吗

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

void userInput(){
    printf("Enter Generation 0 (Length must be 10, * for 1 and " " for 0):\n");
    char c;
    char temp;
    char arr[10];
    int i=0;
    do{
        printf("\nEnter number %d : ", i+1);
        c = getchar();
        while((temp = getchar()) != '\n' && c != EOF);    // this is alternative to fflush
        if(c == 42)     // 42 is ascii code to *
            arr[i] = '1';
        else
            arr[i] = '0';

        i++;
    }while((c!=EOF)&&(i<10));
    for(int j = 0; j < 10; j++){
        printf("%c\n", arr[j]);
    }
}

int main(int argc, const char * argv[]) {
    userInput();
}

这可能不适用于在线编译器