相关疑难解决方法(0)

添加整数或双精度时的C++奇怪输出

我有一个问题,在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++ variables double integer

0
推荐指数
1
解决办法
1735
查看次数

另一种创建随机数的方法

在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上工作.

c c++

0
推荐指数
1
解决办法
115
查看次数

在C++中,是访问未初始化的数组未指定的行为还是未定义的行为?

例如,在以下代码中:

int myarray[3];
int x = myarray[1];
Run Code Online (Sandbox Code Playgroud)

代码是否保证在恒定时间内成功执行,x具有一些整数值?或者编译器是否可以跳过为这个完全/发出代码发出代码来启动GNU Chess并仍然符合C++标准?

这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化.(对不起,我没有Aho,Hopcroft和Ullman的副本,所以不能查找名字.)

c++ unspecified-behavior

0
推荐指数
1
解决办法
181
查看次数

为什么在 c 中使用未初始化变量的地址而不是未初始化的指针是安全的?

正如我从这个答案中了解到的,在 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)

如果我理解正确,未初始化的指针可能指向任何内存地址,这就是为什么使用它通常是一个坏主意。但是为什么同样的事情对未初始化的变量起作用,即为什么未初始化的变量不指向任何内存地址,而是指向我们可以安全使用的位置?为什么语言在这方面对待指针变量和普通变量的方式如此不同?

c undefined-behavior

0
推荐指数
1
解决办法
71
查看次数

无法在c中的0处初始化int

我正在制作一个图像处理程序,我已经初始化了这个变量:

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 int initialization

-1
推荐指数
1
解决办法
143
查看次数

什么时候可以做/使用具有未指定行为的东西?

在C++中,有些东西出现在明确定义和未定义之间.具体而言,这些被称为实现定义未指定.现在,我对未指明的东西很感兴趣.

什么时候可以使用这些功能,什么时候应该避免?是否有正确代码的未指定行为的良好示例?在编写软件时,它是否是最佳选择?

Matt McNabb提供的定义:

  • 未定义 - 任何事情都可能发生

  • 实现定义 - 有限数量的结果是可能的,编译器的文档必须说明会发生什么

  • 未指定 - 可能有限数量的结果 - 通常标准描述了可能结果的集合

  • 定义明确 - 以上都不是

  • 格式良好的程序 - 无错误编译的程序(可能表现出未定义的行为)

后续问题:

放松的原子是否被指定为未指定或明确定义?

标记为从不同角度谈论相同想法的问题的副本.标记为同样的问题涉及未指明行为的定义,而这里的问题是关于如何以及何时使用它.

c++ undefined-behavior unspecified-behavior relaxed-atomics

-2
推荐指数
1
解决办法
203
查看次数

增加未初始化的变量合法吗?

int main() {
 int i;
 i++; // 1
}
Run Code Online (Sandbox Code Playgroud)

我可以确定使用增量后总是得到值“ 1”吗?因为我经常听到变量在初始化之前可以包含任何内容。那是非法的吗?还是如果变量未初始化,增量总是从“ 0”开始?

c++

-3
推荐指数
2
解决办法
542
查看次数

C中未初始化指针的值

假设我们在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值。我错了吗?我们如何解释这些结果?

c pointers initialization

-4
推荐指数
1
解决办法
161
查看次数

为什么这个程序不打印我提供的输入?(C)

我有以下代码:

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)

所以我应该只用一个参数就可以使用它?

c

-7
推荐指数
2
解决办法
102
查看次数