A我的程序有问题。我不知道我做错了什么,但循环做什么不起作用。 at和程序应该询问“如果你想再次运行这个程序,请按T.Other键应关闭此程序。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<!--HEADER-->
<div class="header">
<div id="info">
<p>Select Exercise</p>
<!--THIS IS WHERE I WOULD LIKE THE STRING TO UPDATE-->
</div>
</div>
<!--EXERCISE LIST-->
<div id="exerciseContainer">
<div class="exerciseL exercise">
<h3>Push Ups</h3>
</div>
<div class="exerciseR exercise">
<h3>Dips</h3>
</div>
<div class="exerciseL exercise">
<h3>Burpees</h3>
</div>
<div class="exerciseR exercise">
<h3>Plank</h3>
</div>
<div class="exerciseL exercise">
<h3>Sit Ups</h3>
</div>
<div class="exerciseR exercise">
<h3>Leg Ups</h3>
</div>
<div class="exerciseL exercise">
<h3>Russian Twists</h3>
</div>
<div class="exerciseR exercise">
<h3>Back Raises</h3>
</div>
</div>
<!--SPECIFY TIMING FOR EXERCISES-->
<div id="specifier">
<div id="containSliders">
<!--Exercise time allocator-->
<h1></h1>
<!--I WOULD LIKE THIS TO UPDATE ALSO-->
<div id="containSliderOne">
<p>Time:</p>
<output id="timeValue">60 sec.</output>
<input type="range" id="determineTime" step="10" value="60" min="0" max="180" />
</div>
<!--Exercise time allocator-->
<div id="containSliderTwo">
<p>Rest Time:</p>
<output id="restValue">10 sec.</output>
<input type="range" id="determineRest" step="10" value="10" min="0" max="180" />
</div>
<!--Add rest button-->
<div id="addBreak">
<p>Add Break</p>
</div>
<!--Back Button-->
<div id="cancel">
<a id="exerciseCancel" href="exercises.html">
<img src="images/backButtonUp.png" width="100" alt="" />
<img src="images/backButtonDown.png" width="85" alt="" />
</a>
</div>
<!--Confirm Button-->
<div id="confirm">
<a id="exerciseConfirm" href="routineOverview.html">
<img src="images/whiteTickUp.png" width="95" alt="" />
<img src="images/whiteTickDown.png" width="80" alt="" />
</a>
</div>
</div>
</div>
程序运行正常,但是当我按T时结束。它会关闭。我正在使用Visual Studio 2015
现在我的代码如下:
#include "stdafx.h"
#include <stdlib.h>
#include <conio.h>
#include <time.h>
int main()
{
int a;
int b;
int c;
int f;
int g;
int h;
int d = 0;
char e;
srand(time(0));
do {
printf("How many numbers do you want to show: ");
scanf_s("%i", &a);
printf("od: ");
scanf_s("%i", &b);
printf("do: ");
scanf_s("%i", &c);
h = c + 1;
f = b - h;
for (d; d < a; d++) {
printf("%i ", b + rand() % f);
}
printf("\n");
printf("Restart program? T- Yes");
scanf_s("%s", &e);
} while (e == 't');
_getch();
return 0;
}
但它仍然无效。我不能输入任何信件。当我按任意键时,窗户将关闭
答案 0 :(得分:1)
正如其他人指出的那样,这是因为你试图得到一个"%s"
因此,你无法将它与一个角色进行比较。请改用"%c"
,或使用strcmp
函数比较2个char数组。
顺便提一下,请注意scanf_s是Microsoft唯一的功能。不确定visual studio是否强迫你使用它,但scanf的常见用法不会受到影响,请查看:
scanf("%c", &e);
答案 1 :(得分:0)
而不是scanf_s("%s", &e)
您需要输入scanf("%c", &e)
或使用e=getchar()
之类的内容。
答案 2 :(得分:0)
你按“T”吗?因为'T'和't'不是同一个字符。检查the ascii table
当您按下't'以及'T'或其他任何会停止的程序时,您的程序将继续运行
ps:您可能想要使用“read(0,&amp; e,1);”或“scanf_s(”%c“,&amp; e);”而不是“scanf_s(”%s“,&amp; e);” (do while的最后一行),因为你有一个字符,如果你输入一个字符串,如“Mr T. yes yes”,它将覆盖你永远不会好的内存。
作为提醒字符,内存中有1个字节,'&amp;'你可以在内存中访问它的位置,所以它就像一个字符串,但是如果你写了超过1个字符,它只会在下面的内存中写入,而这个内存不属于你的程序。它可能什么都不做,但它可以覆盖你的另一个变量或者更糟糕的覆盖你计算机中的另一个程序(希望不是像窗口程序那样重要的东西,或者其他!)