int main() { int num;//元素个数 printf("请输入元素个数:"); scanf("%d",&num); getchar(); // 读取并丢弃回车符 char letter[num];//元素名称 float value[num];//元素权值 printf("请分别输入元素名称和其权值:\n"); printf("名称,权值\n"); for(int i=0;i<num;i++) { scanf("%c,%f",&letter[i],&value[i]); getchar(); // 读取并丢弃回车符 } // CreatHuffmanTree(HT,value,num); // HuffmanTreecode(HT,num,letter); return 0; }循环为啥执行不完
时间: 2024-03-05 13:47:53 浏览: 12
循环可能执行不完的原因在于输入元素名称和权值时,scanf函数会读取输入缓冲区中的回车符,从而导致后面的输入无法正常进行。因此,可以在scanf函数之前,使用getchar函数读取并丢弃输入缓冲区中的回车符。
修改后的代码如下:
```
int main() {
int num;//元素个数
printf("请输入元素个数:");
scanf("%d",&num);
getchar(); // 读取并丢弃回车符
char letter[num];//元素名称
float value[num];//元素权值
printf("请分别输入元素名称和其权值:\n");
printf("名称,权值\n");
for(int i=0;i<num;i++)
{
scanf("%c,%f",&letter[i],&value[i]);
getchar(); // 读取并丢弃回车符
}
// CreatHuffmanTree(HT,value,num);
// HuffmanTreecode(HT,num,letter);
return 0;
}
```
相关问题
#include <stdio.h> int main() { int num1, num2; printf("请输入两个整数:\n"); scanf("%d %d", &num1, &num2); printf("和为:%d\n", num1 + num2); printf("差为:%d\n", num1 - num2); printf("积为:%d\n", num1 * num2); if (num2 == 0) { printf("错误:除数不能为 0\n"); } else { printf("商为:%d\n", num1 / num2); } return 0; }将中文替换为英文
#include <stdio.h>
int main() {
int num1, num2;
printf("Please enter two integers:\n");
scanf("%d %d", &num1, &num2);
printf("Sum is: %d\n", num1 + num2);
printf("Difference is: %d\n", num1 - num2);
printf("Product is: %d\n", num1 * num2);
if (num2 == 0) {
printf("Error: divisor cannot be 0\n");
} else {
printf("Quotient is: %d\n", num1 / num2);
}
return 0;
}
输入:48,输出什么,下面的程序#include <stdio.h>int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); printf("二进制数为:%d\n", num); return 0;}
如果输入的是 48,那么程序将输出:
```
二进制数为:48
```
这是因为程序中的输出语句 `printf("二进制数为:%d\n", num);` 中使用的占位符 `%d` 是输出整型变量的,因此 `num` 的值将直接输出。程序没有进行任何转换,因此输出的是输入的整数本身,而不是其对应的二进制数。