在本文中,我们将详细介绍C#:做while循环不工作作为supossed的各个方面,并为您提供关于c#whiletrue不执行循环内容的相关解答,同时,我们也将为您带来关于c#类,结构或接口成员声明中
在本文中,我们将详细介绍C#:做while循环不工作作为supossed的各个方面,并为您提供关于c# while true不执行循环内容的相关解答,同时,我们也将为您带来关于c#类,结构或接口成员声明中的’while’标记无效(while循环不起作用)、C语言循环结构(while循环,for循环,do…while循环)、C#跳过while循环中的if语句、do while循环,C语言do while循环详解的有用知识。
本文目录一览:- C#:做while循环不工作作为supossed(c# while true不执行循环内容)
- c#类,结构或接口成员声明中的’while’标记无效(while循环不起作用)
- C语言循环结构(while循环,for循环,do…while循环)
- C#跳过while循环中的if语句
- do while循环,C语言do while循环详解
C#:做while循环不工作作为supossed(c# while true不执行循环内容)
这个程序应该适用于这两种情况,至less我认为,但是对于一些价值观来说,它并不像预期的那样工作。
static void Main(string[] args) { double num,temp = 0; double frac; int j = 1; num = 1034.264; do { j = j * 10; Console.WriteLine(j); temp = num * j; Console.WriteLine(temp); } while ((temp % 10)!=0); }
对于价值1034.347,其工作正常 –
工作1034.347
但价值1034.235 不工作1034.235它将无限
C# – 为了跟上Joneses – 有一个浮点模数运算符 % 。
(temp % 10)!=0)十进制数)表示为十进制数,所得到的二进制浮点值不太可能将其所有的尾随数字都设置为零,所以(temp % 10)!=0)为false是很少见的。
在你的情况下,解决方法是在你的价值因素1000的工作,并使用适当的整数类型。
参考: 浮点数学是否被破坏?
比较浮点数与相等是非常危险的,因为浮点运算有错误。 例如,数字不是零,它是0.0 […] 01 – 或者:接近于零。 我建议比较一个“带宽”:
abs(nubmer) < 0.000001.
总结
以上是小编为你收集整理的C#:做while循环不工作作为supossed全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
c#类,结构或接口成员声明中的’while’标记无效(while循环不起作用)
我是c#的新手但对c非常熟悉,但这个错误对我来说没有多大意义,因为我已经特别遵循了 http://msdn.microsoft.com/en-us/library/2aeyhxcd.aspx所示的必要语法
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { int years = 1; while (years <=10) { public Form1() { InitializeComponent(); } private void numericupdown1_ValueChanged(object sender,EventArgs e) { int value = Convert.ToInt32(bushels1.Text); numericupdown1.Maximum = value; } private void bushels1_Click(object sender,EventArgs e) { } private void nextYear_Click(object sender,EventArgs e) { } } } }
解决方法
public partial class Form1 : Form { int years = 1; while (years <=10) { //^^
它应该是方法的一部分,如:
public partial class Form1 : Form { int years = 1; public void SomeMethod() { while (years <=10) { //rest of your code }
C语言循环结构(while循环,for循环,do…while循环)
使用循环可以多次重复地执行多条语句,这里的“多条语句”称为循环体。在C语言中,可以使用三种循环,分别是:while、do...while和for。在这些语句中,循环体被重复执行的次数由循环条件控制,称为控制表达式(controlling expression)。这是一个标量类型的表达式,也就是说,它属于一个算术表达式或指针表达式。如果控制表达式的值不等于 0,循环条件为 true,反之,循环条件为 false。
语句 break 和 continue 用于在一次循环还未执行完时,跳转出循环或返回到循环头部。
while 循环
只要控制表达式为 true,while 循环就会反复地执行语句:while (表达式)语句
while 表达式是顶部驱动(top-driven)的循环:先计算循环条件(也就是控制表达式)。如果为 true,就执行循环体,然后再次计算控制表达式。如果控制表达式为 false,程序跳过循环体,而去执行循环体后面的语句。
从语法上讲,循环体只有一条语句组成。如果需要执行多条语句时,可以使用语句块把它们组合在一起。例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。
例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。
【例1】一个 while 循环
/* 从键盘输入数字,然后输出它们的平均值 * -------------------------------------- */ #include <stdio.h> int main() { double x = 0.0,sum = 0.0; int count = 0; printf( "\t--- Calculate Averages ---\n" ); printf( "\nEnter some numbers:\n" "(Type a letter to end your input)\n" ); while ( scanf( "%lf",&x ) == 1 ) { sum += x; ++count; } if ( count == 0 ) printf( "No input data!\n" ); else printf( "The average of your numbers is %.2f\n",sum/count ); return 0; }
在例 1 中,只要用户输入一个小数,下面的控制表达式即为 true:
scanf( "%lf",&x ) == 1
然而,只要函数 scanf()无法将字符串输入转换成浮点数(例如,当用户键入字母 q 时),则 scanf()返回值 0(如果是遇到输入流的尾端或发生错误时,则返回值 -1,表示 EOF)。这时,循环条件为 false,程序将会跳出循环,继续执行循环体后面的 if 语句。
for 循环
和 while 一样,for 循环也是一个顶部驱动的循环,但是它包含了更多的循环逻辑,如下所示:
for ([表达式1];[表达式2];[表达式3])
语句
在一个典型的 for 循环中,在循环体顶部,下述三个动作需要执行:
(1) 表达式 1:初始化
只计算一次。在计算控制表达式之前,先计算一次表达式 1,以进行必要的初始化,后面不再计算它。
(2) 表达式 2:控制表达式
每轮循环前都要计算控制表达式,以判断是否需要继续本轮循环。当控制表达式的结果为 false,结束循环。
(3) 表达式 3:调节器
调节器(例如计数器自增)在每轮循环结束后且表达式 2 计算前执行。即,在运行了调节器后,执行表达式 2,以进行判断。
例 2 展示了使用一个 for 循环初始化数组内每个元素的过程。
【例2】用 for 循环初始化数组
#define ARR_LENGTH 1000 /* ... */ long arr[ARR_LENGTH]; int i; for ( i = 0; i < ARR_LENGTH; ++i ) arr[i] = 2*i;
for 循环头部中的三个表达式可以省略一个或多个。这意味着 for 循环头部最短的形式是:
for ( ; ; )
如果没有控制表达式,则表示循环条件始终是 true,也就是说,这定义了一个死循环。
下面所示的 for 循环,既没有初始化表达式,也没有调节器表达式,它与 while(表达式)语句含义是等效的:
for ( ;表达式; )
事实上,每个 for 循环都可以被改写成 while 循环,反之亦然。例如,例 2 的 for 循环可完全等效为下面的 while 循环:
i = 0; // 初始化计数器 while ( i < ARR_LENGTH ) // 循环条件 { arr[i] = 2*i; ++i; // 递增计数器 }
一般来说,当循环内有计数器或索引变量需要被初始化,并且在每次循环时需要调整它们的值时,最好使用 for 循环,而不是 while 循环。
在ANSI C99中,也可以使用声明来替代表达式1。在这种情况下,被声明变量的作用域被限制在 for 循环范围内。例如:
for ( int i = 0; i < ARR_LENGTH; ++i ) arr[i] = 2*i;
变量 i 被声明在该 for 循环中(与例 2 不同)for 循环结束之后,变量 i 将不会再存在。
逗号运算符常常被用在 for 循环头部,以在表达式 1 中实现多个初始化操作,或者在表达式 3 对每个变量做调整操作。例如,函数 strReverse()使用两个索引变量以保存字符串中字符的次序:
void strReverse( char* str) { char ch; for ( size_t i = 0,j = strlen(str)-1; i < j; ++i,--j ) ch = str[i],str[i] = str[j],str[j] = ch; }
借助于逗号运算符,可以在只允许出现一个表达式的地方,计算多个表达式。
do...while 循环
do...while 循环是一种底部驱动的循环:do 语句 while (表达式);
在控制表达式被第一次计算之前,循环体语句会首先被执行一次。与 while 和 for 循环不同,do...while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。
在例 3 中,读入与执行命令的函数至少会被调用一次。当使用者离开菜单系统,函数 getCommand()将返回常量 END 的值。
【例3】do···while
// 读入和执行所选的菜单命令 // -------------------------------------------- int getCommand( void ); void performCommand( int cmd ); #define END 0 /* ... */ do { int command = getCommand(); // 询问菜单系统 performCommand( command ); // 执行所选的菜单命令 } while ( command != END );
例 4 展示了标准库函数 strcpy()的一个版本,循环体仅为一条简单的语句,而不是一个语句块。因为在循环体执行之后才计算循环条件,所以字符串终止符'\0'也会被复制。
【例4】函数 strcpy()使用 do...while
// 将字符串2复制到字符串1 // ---------------------------- char *strcpy( char* restrict s1,const char* restrict s2 ) { int i = 0; do s1[i] = s2[i]; // 循环体:复制每一个字符 while ( s2[i++] != '\0' ); // 如果刚刚复制的是'\0',则结束循环 return s1; }
C#跳过while循环中的if语句
如何解决C#跳过while循环中的if语句?
这是一个Twitter机器人,可以在日出/日落时发送推文。在只有它才能发布第一条推文。我已经通过使用while循环和两个if语句(针对每个tweet)实现了这一点。但是它跳过第二条if语句,仅执行第一条if语句。就像它甚至不执行第二条if语句中编写的内容。
while (true)
{
DateTime localTime = DateTime.Now;
DateTime test = new DateTime(2020,9,11,53,0);
int timeComparison = DateTime.Compare(localTime,test);
DateTime localTimeTwo = DateTime.Now;
DateTime testTwo = new DateTime(2020,15);
int timeComparisonTwo = DateTime.Compare(localTimeTwo,testTwo);
bool checkPoint = false;
if (timeComparison > 0)
{
Console.WriteLine(localTime);
SendTweet($"< {DateTime.Now} > Sunrise Twitter test ");
Console.Read();
checkPoint = true;
}
if (checkPoint == true && timeComparisonTwo > 0)
{
Console.WriteLine(localTimeTwo);
SendTweet($"< {DateTime.Now} > Sunset Twitter test ");
Console.Read();
break;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
do while循环,C语言do while循环详解
do…while 循环不经常使用,其主要用于人机交互。它的格式是:
do
{
语句;
}
while (表达式);
do…while 和 while 的执行过程非常相似,唯一的区别是:“do…while 是先执行一次循环体,然后再判别表达式”。当表达式为“真”时,返回重新执行循环体,如此反复,直到表达式为“假”为止,此时循环结束。
现在问一个问题:你认为 while 和 do…while 是否等价?它们是否可以相互转换?我们前面讲,while 和 for 是完全等价的,它们是可以相互转换的。那 do…while 和 while、for 等价吗?它们可以相互转换吗?
答案是“不能”。原因十分简单,while 循环体内部不一定会执行,当表达式一开始就为假的时候它就不会执行。但 do…while 不管表达式开始为真还是为假,循环体内部都会先执行一次。
下面举个例子,设计一个计算“一元二次方程”的程序。运行的结果是让你输入三个数,然后计算结果,完了之后还会问你:“您想继续吗?”想继续的话可以再输入三个数,不想继续,输入“N”就退出。下面就来写这个程序:
# include <stdio.h> # include <math.h> int main(void) { float a,b,c; //定义一元二次方程的三个系数 char k; //用于后面判断是否要继续输入 double delta,x1,x2; /*delta用来存储b*b - 4*a*c的值;x1和x2的值分别为方程的解*/ do { //输入一元二次方程的三个系数a、b、c printf("请输入一元二次方程的三个系数,用回车分隔:\n"); printf("a = "); scanf("%f",&a); while(getchar() != '\n'); /*容错处理,scanf后面都加上这一句,作用是清空输入缓冲区,以防用户乱输入*/ printf("b = "); scanf("%f",&b); while(getchar() != '\n'); printf("c = "); scanf("%f",&c); while(getchar() != '\n'); delta = b*b - 4*a*c; //判断delta的值是大于零,等于零,还是小于零 if (delta > 0) { x1 = (-b +sqrt(delta)) / (2*a); x2 = (-b -sqrt(delta)) / (2*a); printf("有两个解,x1 = %f,x2 = %f\n",x2); } else if (0 == delta) { x1 = x2 = (-b) / (2*a); printf("有唯一解,x1 = x2 = %f\n",x1); } else { printf("无实数解\n"); } //询问是否想继续输入 printf("您想继续吗,Y想,N不想:"); scanf("%c",&k); //输入Y或者N,表示“想”或“不想” while(getchar() != '\n'); } while ('Y' == k); return 0; }输出结果是:
请输入一元二次方程的三个系数,用回车分隔:
a = 1
b = 5
c = 6
有两个解,x1 = -2.000000,x2 = -3.000000
您想继续吗,N不想:Y
请输入一元二次方程的三个系数,用回车分隔:
a = 2
b = 3
c = 4无实数解
您想继续吗,N不想:N
程序中,“while(getchar()!='\n');”是 getchar() 的高级用法,作用是彻底地清空输入缓冲区。getchar() 每次从缓冲区中取出一个字符,只要取出的字符不是回车就一直取,这样就将缓冲区中所有的垃圾字符都取出来了。
此外,do…while(1) 和 while(1) 虽然不等价,但是在功能上可以互换,因为反正是无限制循环,所以不管是先执行一次循环体再判断,还是先判断再执行循环体结果都一样。但如果 while 后面的表达式不是 1,那就不能相互替换。大家看上面这个程序,do…while 中不是 do…while(1),而是 do…while('Y'==k),即只有 'Y'==k 才执行循环,但只有先执行一次循环体才知道变量 k 中存储的是什么,才能执行最后的 while('Y'==k),这样就无法用 while(1) 来替代。因此 do…while 一般的使用场合为 while 后的表达式不为 1。
这就是人机交互,用户与机器里面的一个程序进行相互交流:机器给一个提示,用户输入一个值,然后机器再将结果返回给用户,然后再给你一个提示……就这样一步一步执行。do…while 主要用于人机交互,在其他地方都用得很少。
关于C#:做while循环不工作作为supossed和c# while true不执行循环内容的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c#类,结构或接口成员声明中的’while’标记无效(while循环不起作用)、C语言循环结构(while循环,for循环,do…while循环)、C#跳过while循环中的if语句、do while循环,C语言do while循环详解的相关信息,请在本站寻找。
本文标签: