我有一个问题,在c ++中添加数字类型并且无法弄清楚为什么会发生这种情况,我希望当我输入3个保龄球分数时我会得到9或9.00,而我得到像3.31748e + 258这样的疯狂,我在做什么错误?任何帮助都会有很长的路要走!
#include<iostream>
#include<cmath>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
/*Coordinate variables*/
double bowlTotal;
double bowlScore;
const int FIVE_PLAYERS = 5;
for( int players = 0; players < FIVE_PLAYERS ; players++ )
{
cout << "Player " << players + 1 << endl << endl;
for( int games = 0; games < 3; games++ )
{
double score;
score = 0;
cout << "Please enter score for game #" << games + …Run Code Online (Sandbox Code Playgroud) 在C/C++中创建随机数的有效方法是rand()函数.但我看到这样的代码创建随机变量:
int x; x%=100;
Run Code Online (Sandbox Code Playgroud)
这是生成简单随机数的好方法吗?如果您的答案是否定的,请告诉我原因?
编辑: 实际的代码在这里:
int temp1,temp2;
A=(abs(temp1))%11-1;
B=(abs(temp2))%11-1; //Randomize without using rand()
Run Code Online (Sandbox Code Playgroud)
我的一个朋友写了这段代码.我试图编译它,我得到uninitialized local variable 'temp1' used错误(在MSVS上).他在2011年编写了这段代码,并使用最新版本的GCC在他的Linux上工作.
例如,在以下代码中:
int myarray[3];
int x = myarray[1];
Run Code Online (Sandbox Code Playgroud)
代码是否保证在恒定时间内成功执行,x具有一些整数值?或者编译器是否可以跳过为这个完全/发出代码发出代码来启动GNU Chess并仍然符合C++标准?
这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化.(对不起,我没有Aho,Hopcroft和Ullman的副本,所以不能查找名字.)
正如我从这个答案中了解到的,在 C 中使用未初始化变量的地址并不是未定义的行为。例如,我可以写:
#include <stdio.h>
int main(void) {
char letter;
printf("%p\n", &letter); //prints '0061ff1f'
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我编写以下代码:
#include <stdio.h>
int main(void) {
char *letter1;
printf("%p\n", letter1); //gcc issues warning
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc 给了我以下错误:
C:\...>gcc -Wall -Wextra -pedantic -std=c11 test.c -o main
test.c: In function 'main':
test.c:12:2: warning: 'letter1' is used uninitialized in this function [-Wuninitialized]
printf("%p\n", letter1);
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,未初始化的指针可能指向任何内存地址,这就是为什么使用它通常是一个坏主意。但是为什么同样的事情对未初始化的变量起作用,即为什么未初始化的变量不指向任何内存地址,而是指向我们可以安全使用的位置?为什么语言在这方面对待指针变量和普通变量的方式如此不同?
我正在制作一个图像处理程序,我已经初始化了这个变量:
int minR, minG, minB = 255; int maxR, maxG, maxB = 0;
printf("%d", maxG);
Run Code Online (Sandbox Code Playgroud)
当我打印这个,而不是得到它应该是0,我得到16384作为maxG的值.但是,如果我这样做:
int minR, minG, minB = 255; int maxR, maxB = 0;
int maxG = 0; printf("%d", maxG);
Run Code Online (Sandbox Code Playgroud)
一切顺利.
有谁知道为什么会这样?谢谢.
在C++中,有些东西出现在明确定义和未定义之间.具体而言,这些被称为实现定义和未指定.现在,我对未指明的东西很感兴趣.
什么时候可以使用这些功能,什么时候应该避免?是否有正确代码的未指定行为的良好示例?在编写软件时,它是否是最佳选择?
Matt McNabb提供的定义:
未定义 - 任何事情都可能发生
实现定义 - 有限数量的结果是可能的,编译器的文档必须说明会发生什么
未指定 - 可能有限数量的结果 - 通常标准描述了可能结果的集合
定义明确 - 以上都不是
格式良好的程序 - 无错误编译的程序(可能表现出未定义的行为)
后续问题:
放松的原子是否被指定为未指定或明确定义?
int main() {
int i;
i++; // 1
}
Run Code Online (Sandbox Code Playgroud)
我可以确定使用增量后总是得到值“ 1”吗?因为我经常听到变量在初始化之前可以包含任何内容。那是非法的吗?还是如果变量未初始化,增量总是从“ 0”开始?
假设我们在C中具有以下声明:
double d[25], * p;
int * t;
char * c;
Run Code Online (Sandbox Code Playgroud)
我们如何解释以下printf()结果?
printf("d : %x\t",d);
printf("p : %x\t",p);
printf("t : %x\t",t);
printf("c : %x\t",c);
Run Code Online (Sandbox Code Playgroud)
哪个打印ligne:
d : 62fd30 p : 1 t : 0 c : 39
Run Code Online (Sandbox Code Playgroud)
我们可以很清楚地看到d的内存地址,但p,t和c看起来都不像地址。我曾经认为,未初始化的指针在声明后采用Null值。我错了吗?我们如何解释这些结果?
我有以下代码:
int main(){
char readChars[3];
puts("Enter the value of the card please:");
scanf(readChars);
printf(readChars);
printf("done");
}
Run Code Online (Sandbox Code Playgroud)
我只看到:"完成"后我输入一些值给终端并按Enter键,为什么?
编辑:
不是scanf的原型:
int scanf(const char *format, ...);
Run Code Online (Sandbox Code Playgroud)
所以我应该只用一个参数就可以使用它?