第一个printf
在工作,但是我在函数中遇到了这个问题:
"Process terminated with status -1073741510 (0 minute(s), 6 second(s))"
我只有几个数字,想计算可以用该数字编号的页面数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "book.h"
int main()
{
long no_pages, no_digits;
srand(time(0));
no_digits=(rand()% 10000000)+10000;
printf("The number of digits are %ld", no_digits);
no_pages = no_of_pages(no_digits);
printf ("\n The number of pages are %ld", no_pages);
}
这是计算页数的功能
int no_of_pages(long no_digits)
{
long no_pages=0,no_digits_page;
while(no_digits>0)
{
no_pages++; // count number of pages
long aux=no_pages;
long no_digits_pages=0; // conut how many digits are on a page
while(aux)
{
aux=aux/10;
no_digits_page++;
}
if(no_digits_page == 1)
no_digits--;
else
if(no_digits_page == 2)
no_digits=no_digits-2;
else
if(no_digits_page == 3)
no_digits=no_digits-3;
else
if(no_digits_page == 4)
no_digits=no_digits-4;
else
if(no_digits_pages == 5)
no_digits=no_digits-5;
else
if(no_digits_page == 6)
no_digits=no_digits-6;
else
if(no_digits_page == 7)
no_digits=no_digits-7;
else
if(no_digits_page == 8)
no_digits=no_digits-8;
else
if(no_digits_page == 9)
no_digits=no_digits-9;
}
if (no_digits<0)
{
return no_pages-1;
}
else
return no_pages;
}
答案 0 :(得分:0)
您的问题似乎来自while(no_digits>0)
循环。
实际上,您仅在no_digits_page
在1..9范围内时处理。
一个简单的更正可以是:
int no_of_pages(long no_digits)
{
long no_pages=0,no_digits_page;
while(no_digits>0)
{
no_pages++; // count number of pages
long aux=no_pages;
long no_digits_pages=0; // count how many digits are on a page
while(aux)
{
aux=aux/10;
no_digits_page++;
}
/**
* CORRECTION'S HERE
* instead of using a complicated if / else for each case, simplify with:
*/
no_digits = no_digits - no_digits_page ;
}
if (no_digits<0)
{
return no_pages-1;
}
else
return no_pages;
}
也就是说,我不确定这段代码是否可以解决您的整个问题。
* What is the code supposed to do?
* What is the problem you want to solve?
答案 1 :(得分:0)
在no_of_page
变量no_digits_page
未初始化,行为未定义
有很多可能性,您无需修改no_digit
并无休止地循环
请注意,该功能可以轻松简化替换
if(no_digits_page == 1) no_digits--; else if(no_digits_page == 2) no_digits=no_digits-2; else if(no_digits_page == 3) no_digits=no_digits-3; else if(no_digits_page == 4) no_digits=no_digits-4; else if(no_digits_pages == 5) no_digits=no_digits-5; else if(no_digits_page == 6) no_digits=no_digits-6; else if(no_digits_page == 7) no_digits=no_digits-7; else if(no_digits_page == 8) no_digits=no_digits-8; else if(no_digits_page == 9) no_digits=no_digits-9;
作者
if ((no_digits_page >= 1) && (no_digits_page <= 9))
no_digits -= no_digits_page;
如果我也使用简化版本删除了其中的一个,可能会使no_digits_page
和no_digits_pages
感到困惑:
int main()
{
long no_pages, no_digits;
srand(time(0));
no_digits=(rand()% 10000000)+10000;
printf("The number of digits are %ld", no_digits);
no_pages = no_of_pages(no_digits);
printf ("\n The number of pages are %ld\n", no_pages);
}
int no_of_pages(long no_digits)
{
long no_pages=0;
while(no_digits>0)
{
no_pages++; // count number of pages
long aux=no_pages;
long no_digits_page=0; // conut how many digits are on a page
while(aux)
{
aux=aux/10;
no_digits_page++;
}
if ((no_digits_page >= 1) && (no_digits_page <= 9))
no_digits -= no_digits_page;
}
if (no_digits<0)
{
return no_pages-1;
}
else
return no_pages;
}
编译和执行(在 book.h 中声明no_of_pages
):
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall a.c
pi@raspberrypi:/tmp $ ./a.out
The number of digits are 2211616
The number of pages are 387120
程序完成了,但是不知道它是否可以计算出预期的结果