在C中执行while循环
我正在使用数组实现一个多项式。以下是问题陈述: 编写一个菜单驱动程序,使用数组将多项式表示为数据结构。编写两个多项式的加、减、乘函数;将一个多项式与一个常数相乘,找出一个多项式是否为“零多项式”,返回多项式的次数。假设每次操作后都会创建一个新的多项式。如何输入和输出多项式 我已经创建了输入和输出函数。但是我的do while循环运行了两次。请帮助我找出原因 do-while循环 }在C中执行while循环,c,loops,do-while,C,Loops,Do While,我正在使用数组实现一个多项式。以下是问题陈述: 编写一个菜单驱动程序,使用数组将多项式表示为数据结构。编写两个多项式的加、减、乘函数;将一个多项式与一个常数相乘,找出一个多项式是否为“零多项式”,返回多项式的次数。假设每次操作后都会创建一个新的多项式。如何输入和输出多项式 我已经创建了输入和输出函数。但是我的do while循环运行了两次。请帮助我找出原因 do-while循环 } 打印菜单()功能 create_poly()函数 以下是一个示例输出: 1. Create a new polyn
打印菜单()
功能
create_poly()
函数
以下是一个示例输出:
1. Create a new polynomial.
2. Print polynomial.
q. Exit
Enter Choice:1
ch = 1
Enter size of the polynomial:2
Enter terms of the polynomial(coeff then exponent):
2 4
6 7
1. Create a new polynomial.
2. Print polynomial.
q. Exit
Enter Choice:
ch =
Invalid choice.
1. Create a new polynomial.
2. Print polynomial.
q. Exit
Enter Choice:q
ch = q
1.创建一个新的多项式。
2.打印多项式。
q、 出口
输入选项:1
ch=1
输入多项式的大小:2
输入多项式的项(系数然后指数):
2 4
6 7
1.创建一个新的多项式。
2.打印多项式。
q、 出口
输入选项:
ch=
无效的选择。
1.创建一个新的多项式。
2.打印多项式。
q、 出口
输入选项:q
ch=q
尝试刷新stdin
…问题仍然存在。在每个步骤中打印ch
的值,我认为这是一个空白。空白从何而来
答案也回答了这个问题。在您做出初始选择后,还有一个额外的字符等待使用,这就是循环执行两次的原因
请参见comp.lang.c常见问题解答中的n,如果您测试下一个代码,您将注意到相同的问题
int main() {
char c;
do {
scanf_s("%c", &c);
if (c != 'q')
printf("test scanf() function\n");
} while (c);
}
当按下enter键时,scanf()函数起作用,但这会在缓冲区输入中插入另一个字符,即新行“\n”的字符,由于循环阻塞,scanf()会再次获取该字符。请尝试使用此代码更改以前的代码:`
do {
scanf_s("%c", &c); // or c = getchar();
switch (c){
case '\n':
break;
default:
printf("test scanf() function\n");
}
} while (c);`
并且可以正常工作。在代码中,仅在开关块中添加一个新的大小写:
switch(ch) {
case '1':
create_poly(poly,termpool,&next_poly);
break;
case '2':
print_poly(poly,termpool,&next_poly);
break;
case '\n':
break;
case 'q':
break;
default:
printf("Invalid choice.");
}
抱歉,英语不是我的母语您应该阅读您正在使用的每个函数的文档,尤其是。您应该测试
scanf
的结果。您应该使用所有警告和调试信息(gcc-Wall-Wextra-g
)进行编译。您应该学习如何使用调试器(gdb
)。此外,请编辑您的问题以改进它。它缺少一个Linux
标记!请将\n
放在格式字符串的末尾,而不是开头。另请参见@BasileStarynkevitch:我不同意标记建议。如果它应该是可移植的(没有指示它不应该是可移植的),linux标记可能是错误的。顺便说一句,我想您会发现信息丰富。这一行:scanf(“%d”,&pos);有两个问题1)需要检查scanf()的返回值,以确保目标参数是实际输入/设置的。2)scanf()在格式参数中没有特定编码的情况下不会占用空白。建议格式参数为:%d“因此将使用前导空格,包括未测试scanf返回值的任何换行符始终是一个错误。
1. Create a new polynomial.
2. Print polynomial.
q. Exit
Enter Choice:1
ch = 1
Enter size of the polynomial:2
Enter terms of the polynomial(coeff then exponent):
2 4
6 7
1. Create a new polynomial.
2. Print polynomial.
q. Exit
Enter Choice:
ch =
Invalid choice.
1. Create a new polynomial.
2. Print polynomial.
q. Exit
Enter Choice:q
ch = q
int main() {
char c;
do {
scanf_s("%c", &c);
if (c != 'q')
printf("test scanf() function\n");
} while (c);
}
do {
scanf_s("%c", &c); // or c = getchar();
switch (c){
case '\n':
break;
default:
printf("test scanf() function\n");
}
} while (c);`
switch(ch) {
case '1':
create_poly(poly,termpool,&next_poly);
break;
case '2':
print_poly(poly,termpool,&next_poly);
break;
case '\n':
break;
case 'q':
break;
default:
printf("Invalid choice.");
}