C 如何使用strtok打印二进制数?
因此,我试图通过使用strtok函数迭代用户输入的字符串来获得一个二进制数。如果用户输入alpha,则打印0,如果用户输入beta,则输出1。因此,如果用户输入“alpha beta alpha”,则输出应为“01010”。我有下面的代码,但我不确定我哪里出了问题,因为它没有做我描述的行为C 如何使用strtok打印二进制数?,c,input,whitespace,scanf,strtok,C,Input,Whitespace,Scanf,Strtok,因此,我试图通过使用strtok函数迭代用户输入的字符串来获得一个二进制数。如果用户输入alpha,则打印0,如果用户输入beta,则输出1。因此,如果用户输入“alpha beta alpha”,则输出应为“01010”。我有下面的代码,但我不确定我哪里出了问题,因为它没有做我描述的行为 #include <math.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #i
#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);
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
字符用户输入[250];
长二进制数组[250];
字符*令牌;
int计数器=0;
长二进制数=0;
printf(“输入α或β”);
scanf(“%s”,用户输入);
token=strtok(userinput,“”);
while(令牌!=NULL)
{
如果(!strcmp(标记,“alpha”))
{
二进制数组[计数器]=0;
计数器+=1;
}
如果(!strcmp(令牌,“beta”))
{
二进制数组[计数器]=1;
计数器+=1;
}
令牌=strtok(空,“\0”);
}
对于(int i=0;i
如何解决此问题?问题是
scanf("%s",userinput);
遇到第一个空格后,扫描停止。因此,它无法扫描和存储像这样的输入
α-β-α-β-α
由空格分隔。引用章节§7.21.6.2中的C11
s
匹配一系列非空白字符
可能的解决方案:您需要使用来读取带有空格的用户输入。正如@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");
}
#包括
#包括
int main(int argc,char*argv[])
{
char userinput[250]={0};
字符二进制数组[250];
字符*令牌;
计数器的大小=0;
printf(“输入α或β”);
fgets(userinput,sizeof(userinput),stdin);
令牌=strtok(userinput,“\n\0”);
而((token!=NULL)&&(count
但你还有其他问题:
“\n\0”
,以匹配单词之间所有可能的字符李>
%ld”
格式说明符打印它不会打印前导零。您可以直接将字符存储到缓冲区中李>
并且不会打印前导零。最好构造一个由
'0'
和'1'
字符组成的字符串,而不是将其转换成一个看起来像二进制数的十进制数。或者在执行时只打印数字,而不是将其存储起来,以便在最后一次全部打印。@JohnBollinger所以我尝试在strcmp函数和它仍然只打印出1digit@h101这是在做了这个答案中建议的更改之后吗?好的,是的,fgets最终解决了我的问题,它现在按预期工作。好的,我刚刚发布了实际的代码。那么,我如何修改代码,以便它总是先为二进制数打印一个1,而不管是alpha还是beta打电话。例如,alpha-beta将是二进制101,而beta-alpha将是1110char二进制数组[250]={'1'};int计数器=1;有没有电子邮件我可以问你一个问题?由于某些原因,我有一些问题,由于学术政策,我不允许发布我的所有代码。对不起,我不想发布我的任何电子邮件帐户。尝试用不同的代码复制代码并发布。