C:当循环退出条件时,使用FGET作为输入
我正在编写一个程序,将二进制转换为十进制,用户输入原始数字或按q退出。我的while循环没有退出,q被解释为十进制数。阻止这种情况并解决这个问题的最佳方法是什么?下面是预期输出、实际输出和我的代码 预期产出:C:当循环退出条件时,使用FGET作为输入,c,while-loop,fgets,C,While Loop,Fgets,我正在编写一个程序,将二进制转换为十进制,用户输入原始数字或按q退出。我的while循环没有退出,q被解释为十进制数。阻止这种情况并解决这个问题的最佳方法是什么?下面是预期输出、实际输出和我的代码 预期产出: Enter binary byte or press q to quit: 111 7 Enter binary byte or press q to quit: q Goodbye! 实际支出: Enter binary byte or press q to quit: 111 7
Enter binary byte or press q to quit: 111
7
Enter binary byte or press q to quit: q
Goodbye!
实际支出:
Enter binary byte or press q to quit: 111
7
Enter binary byte or press q to quit: q
65
代码:
#包括
#包括
#包括
#包括
#定义停止“q”
int convertbinary(字符*二进制数);
int main()
{
int二进制返回;
字符*b编号;
内伦;
bnumber=(char*)malloc(10*sizeof(char*));
printf(“输入二进制字节或键入q退出:?\n”);
while(fgets(bnumber,10,stdin)!=停止)
{
len=strlen(b编号);
如果(b编号[len-1]='\n')
{
b编号[len-1]=0;
}
其他的
{
//空行
}
binaryreturn=convertbinary(bnumber);
printf(“%d\n”,二进制返回);
printf(“输入二进制字节或键入q退出:?\n”);
}
免费(bnumber);
返回0;
}
int convertbinary(字符*二进制数)
{
int-val=0;
而(*binarynumber!='\0')
val=2*val+(*binarynumber++-'0');
返回val;
}
正如其他人所说,您需要将字符串与进行比较,而不是=代码>,因为这在C中是不正确的
我还建议检查来自的void*
指针的返回值,因为在为堆上的动态数组分配空间时,这是一种很好的做法
你可以简单地写:
char *bnumber = malloc(10 * sizeof *bnumber);
而不是:
char *bnumber = (char *) malloc(10 * sizeof(char *)); //Note
我还看到您将math.h
作为标题之一。不需要该头,因为您没有使用它的任何函数
我还在这个例子中添加了一些额外的错误检查,因为这将有助于防止程序中出现错误
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 10
int convertbinary(char *binarynumber);
int
main(void) {
int binaryreturn;
char *bnumber;
size_t currsize = BUFFSIZE, len;
const char *quit = "q";
bnumber = malloc(currsize * sizeof *bnumber);
if (!bnumber) {
printf("Cannot allocate memory!\n");
exit(EXIT_FAILURE);
}
printf("Enter binary byte or type q to quit: ");
while (fgets(bnumber, currsize, stdin) != NULL) {
len = strlen(bnumber);
if (len > 0) {
if (bnumber[len-1] == '\n') {
bnumber[len-1] = '\0';
} else {
printf("Buffer Exceeds length of %d\n", BUFFSIZE);
exit(EXIT_FAILURE);
}
}
if (!*bnumber) {
printf("No number entered.\n");
printf("\nEnter binary byte or type q to quit: ");
} else {
if (strcmp(bnumber, quit) == 0) {
printf("Goodbye\n");
break;
}
binaryreturn = convertbinary(bnumber);
printf("binary number = %d\n", binaryreturn);
printf("\nEnter binary byte or type q to quit: ");
}
}
free(bnumber);
bnumber = NULL;
return 0;
}
int
convertbinary(char *binarynumber) {
int val = 0;
while (*binarynumber != '\0') {
val = 2 * val + (*binarynumber++ - '0');
}
return val;
}
#包括
#包括
#包括
#定义大小10
int convertbinary(字符*二进制数);
int
主(空){
int二进制返回;
字符*b编号;
大小\u t currsize=BUFFSIZE,len;
常量字符*quit=“q”;
b编号=malloc(currsize*sizeof*b编号);
如果(!bnumber){
printf(“无法分配内存!\n”);
退出(退出失败);
}
printf(“输入二进制字节或键入q退出:”;
while(fgets(bnumber,currsize,stdin)!=NULL){
len=strlen(b编号);
如果(len>0){
如果(b编号[len-1]='\n'){
b编号[len-1]='\0';
}否则{
printf(“缓冲区长度超过%d\n”,BUFFSIZE);
退出(退出失败);
}
}
如果(!*b编号){
printf(“未输入编号。\n”);
printf(“\n输入二进制字节或键入q退出:”;
}否则{
如果(strcmp(b编号,退出)=0){
printf(“再见”);
打破
}
binaryreturn=convertbinary(bnumber);
printf(“二进制数=%d\n”,二进制返回);
printf(“\n输入二进制字节或键入q退出:”;
}
}
免费(bnumber);
bnumber=NULL;
返回0;
}
int
convertbinary(字符*二进制数){
int-val=0;
而(*binarynumber!='\0'){
val=2*val+(*binarynumber++-'0');
}
返回val;
}
< /代码>做简单的“代码>”(FGET(BNITE,10,STDIN)!=停止)< /C> > >代码>(FGET(BNITE,10,STDIN)& & BNAT[1]=‘Q’)/代码>为您工作。但是当用户输入停止信时,您不应该采取错误退出。我会考虑正常退出,只使用<代码>破解< /代码>。@ Markovnikov没有问题,如果你喜欢这个答案,打勾。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 10
int convertbinary(char *binarynumber);
int
main(void) {
int binaryreturn;
char *bnumber;
size_t currsize = BUFFSIZE, len;
const char *quit = "q";
bnumber = malloc(currsize * sizeof *bnumber);
if (!bnumber) {
printf("Cannot allocate memory!\n");
exit(EXIT_FAILURE);
}
printf("Enter binary byte or type q to quit: ");
while (fgets(bnumber, currsize, stdin) != NULL) {
len = strlen(bnumber);
if (len > 0) {
if (bnumber[len-1] == '\n') {
bnumber[len-1] = '\0';
} else {
printf("Buffer Exceeds length of %d\n", BUFFSIZE);
exit(EXIT_FAILURE);
}
}
if (!*bnumber) {
printf("No number entered.\n");
printf("\nEnter binary byte or type q to quit: ");
} else {
if (strcmp(bnumber, quit) == 0) {
printf("Goodbye\n");
break;
}
binaryreturn = convertbinary(bnumber);
printf("binary number = %d\n", binaryreturn);
printf("\nEnter binary byte or type q to quit: ");
}
}
free(bnumber);
bnumber = NULL;
return 0;
}
int
convertbinary(char *binarynumber) {
int val = 0;
while (*binarynumber != '\0') {
val = 2 * val + (*binarynumber++ - '0');
}
return val;
}