2016-09-29 59 views
1

所以即时通讯尝试从使用strtok函数迭代通过用户输入的字符串获取二进制数。如果用户输入alpha,则输出0,如果用户输入beta,则输出1.因此,如果用户输入“alpha beta alpha alpha alpha”,则输出应该是“01010”。我有以下的代码,但我不知道哪里会出错,因为它没有做我描述的行为如何使用strtok打印二进制数字?

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

#include <string.h> 
int main(int argc, char * argv[]) 
{ 
    char userinput[250]; 
    long binaryarray[250]; 
    char *token; 
    int counter = 0; 
    long binarynumber = 0 ; 
    printf("enter alpha or beta"); 
    scanf("%s", userinput); 
    token = strtok(userinput, " "); 
    while (token != NULL) 
    { 
     if(!strcmp(token, "alpha")) 
     { 
      binaryarray[counter] = 0; 
      counter += 1; 
     } 
     if(!strcmp(token, "beta")) 
     { 
      binaryarray[counter] = 1; 
      counter += 1; 
     } 
     token = strtok(NULL, " \0"); 
    } 
    for(int i = 0; i < counter; i++) 
    { 
     binarynumber = 10 * binarynumber + binaryarray[i]; 
    } 
    printf("%ld", binarynumber); 
} 

我该如何解决这个问题?

+0

好吧,我刚刚发布的实际代码 – h101

回答

0

正如已经@SouravGhosh说,你应该使用fgets以存储用户使用空格插入整个字符串。

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

int main(int argc, char * argv[]) 
{ 
    char userinput[250] = {0}; 
    char binaryarray[250]; 
    char* token; 
    size_t counter = 0; 

    printf("enter alpha or beta"); 
    fgets(userinput, sizeof(userinput), stdin); 

    token = strtok(userinput, " \n\0"); 

    while ((token != NULL) && (count < sizeof(binaryarray))) 
    { 
     if(!strcmp(token,"alpha")) 
     { 
      binaryarray[counter] = '0'; 
      counter++; 
     } 
     else if(!strcmp(token,"beta")) 
     { 
      binaryarray[counter] = '1'; 
      counter++; 
     } 
     token = strtok(NULL, " \n\0"); 
    } 

    for(size_t i=0 ; i< counter; i++) 
    { 
     printf("%c", binaryarray[i]); 
    } 

    printf("\n"); 
} 

但是你有其他问题:

  1. 您的令牌应该" \n\0"匹配词与词之间的所有可能的字符。
  2. 所有标记必须用一个单一的输入的情况下,第一strok进行检查,因此使用没有空格
  3. 一个int来计算你的“二进制”,并与"%ld"格式说明打印不打印前导零。您可以直接将字符存储到缓冲区中。
+0

也因此如何将我修改代码,使其始终打印第1的二进制数,无论α或β是否被调用。因此,例如alpha beta将在二进制101和beta beta alpha将是1110 – h101

+0

char binaryarray [250] = {'1'}; int counter = 1; – LPs

+0

有没有电子邮件我可以通过问你一个问题?由于某种原因,我有一些问题,因为学术政策,我不允许发布我的所有代码。 – h101

2

的问题是,对于

scanf("%s",userinput); 

扫描在遇到第一个空白后停止。因此,它不能扫描并存储的输入像

α,βα,β的α

由空格隔开。引用C11,章§7.21.6.2

s

匹配的非空白字符的序列。

可能的解决方案:您需要使用fgets()读取与空格的用户输入。

+0

而前导零不会被打印出来。最好是构造一个“0”和“1”字符串,而不是将其转换为看起来像二进制数的小数。 –

+0

或者直接打印数字,而不是将它们存储起来以便在最后一次打印。 –

+0

@JohnBollinger所以我只是尝试了STRCMP功能后,将打印报表的仍然只是打印出1位 – h101

相关问题