2013-09-22 3 views
2

Я новичок в программировании и iam из Твери. В программе есть проблема. Я не знаю, где. Я использую входной файл и выходной файл. Итак, я попытался отладить программу, но я не смог Я использую Visual Studio 2010. Спасибо заранее.Ошибка отладки fprintf в VS 2010

#include <iostream> 
#include <stdio.h> 
#include <math.h> 
#include <conio.h> 
#include <string.h> 
using namespace std; 
int num[100]; 
void outc(int s, int ss) 
{int i,temp,numb[100],k,l,t; 
temp=s; i=0; 
while (temp>0) 
{ 
    numb[i]=temp%ss; 
if (numb[i]>=10) numb[i]='A'-10+temp%16; 
temp/=ss; 
i++;} 
l=i/2; t=0; 
i--; 
while (i>=l) 
{ 
    k=numb[t]; 
    numb[t]=numb[i]; 
    numb[i]=k; 
    t++; 
    i--; 
} 
FILE* fooo; 
    errno_t errorCodes=fopen_s(&fooo,"output.txt","w"); 
    fprintf(fooo,"s%d= %d\n", ss, numb); 
return; 
} 
int main() 
{char c,strbuf[100],num[100]; 
char *res; 
int k,s,i,temp,ost,s2,s8,s10,s16; 


FILE* foo; 
    errno_t errorCode=fopen_s(&foo,"input.txt","r"); 
    fgets(strbuf,1000,foo); 


    if(strbuf[strlen(strbuf)-1]=='b') 
    { 
     strncpy_s(strbuf, strbuf, strlen(strbuf)-1); 
     c=atoi(strbuf); 
    k=0;s=0; 
    while(c!=0) 
    s+=(c%10)*pow(2,k); 
    c/=10; 
    k++; 
    } else 
    if(strbuf[0]==0 && strbuf[1]!='x') 
    {i=0;; 
     do{ 
     strbuf[i]=strbuf[i+1]; 
     i++; 
     }while(i!=strlen(strbuf)-1); 
     c=atoi(strbuf); 
    k=0;s=0; 
    while(c!=0) 
    s+=(c%10)*pow(8,k); 
    c/=10; 
    k++; 
    } else 
    if(strbuf[0]=='0' && strbuf[1]=='x') 
{i=0;k=strlen(strbuf); 
     do{ 

     strbuf[i]=strbuf[i+2]; 
     i++; 
     }while(i!=k); 

    puts(strbuf); 
    k=0;s=0; 
    for (i=strlen(strbuf)-1;i>=0; i--) 
    { 

    if (strbuf[i]>='A' && strbuf[i]<='F') 

    c=10+strbuf[i]-'A'; else c=strbuf[i]-'0'; 
    printf("%d\n",c); 
    s+=c*pow(16,k); 

    k++; 
    } 
    } else s=atoi(strbuf); 
    printf("%d\n",s); 
outc(s,2); 
outc(s,8); 
FILE* fooo; 
    errno_t errorCodep=fopen_s(&fooo,"output.txt","w"); 
    fprintf(fooo,"s10= %d\n", s); 
outc(s,16); 
//if (temp%16>=10) num[len-1]='A'-10+temp%16; 
//printf("s2= %d\ns8= %d\ns10= %d\ns16= %d\n", s2, s8, s, s16); 

    _getch(); 
    return 0; 
} 
+0

'FILE * fooo; errno_t errorCodes = fopen_s (& fooo, "output.txt", "w"); '** ?? ** –

+0

@GrijeshChauhan См., например, http://msdn.microsoft.com/en-us/library/z5hh6ee9%28v=vs.90%29.aspx –

+0

Возможно, вам захочется проверить, действительно ли файл был открыт перед его использованием. –

ответ

1

Это многочисленные вопросы:

  1. Вы не #include <iostream> или может иметь using namespace std в программе C.

  2. Здесь очень много специфических компиляторов, которые помогут большинству людей помочь вам. Вы сделаете вашу жизнь намного легче, написав в стандартном C. Мне не удалось собрать эту программу, чтобы, к примеру, проверить, что с ней не так.

  3. Ваш код очень трудно следовать, если вы используете имена переменных, как k и s и s2, и тому подобное, и делать такие вещи, как FILE * foo следуют FILE * fooo. Ваш код также просто отформатирован ужасно.

  4. С strncpy_s(strbuf, strbuf, ...), если Microsoft не делает что-то действительно странное, здесь вы не можете указать ту же строку, что и источник и пункт назначения.

  5. strtol() здесь лучше, чем atoi().

  6. Вы не закрываете ни один из файлов, которые вы открываете, и вы не проверяете, действительно ли они открылись. Использование оператора & здесь: errorCode=fopen_s(&foo, ... очень подозрительно, но опять же вы используете нестандартную функцию, поэтому кто знает.

  7. Здесь: fprintf(fooo,"s%d= %d\n", ss, numb) Вы скажете fprintf() ожидать два int s, но последним аргументом является массив.

Смежные вопросы