2

私はプログラミングの初心者で、Tver 出身です。プログラムに問題があります。どこかわかりません。入力ファイルと出力ファイルを使用しています。それで、プログラムをデバッグしようとしましたが、Visual Studio 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;
}
4

1 に答える 1

1

これには多くの問題があります。

  1. Cプログラムではできません#include <iostream>using namespace std

  2. ここには多くのコンパイラ固有のものがあるため、ほとんどの人があなたを助けるのは難しいでしょう. 標準 C で書くことで、あなたの生活はずっと楽になります。たとえば、このプログラムをコンパイルして何が問題なのかをチェックする方法はありません。

  3. k、 、 、 などsの変数名を使用しs2FILE * fooその後にFILE * fooo. あなたのコードもひどくフォーマットされています。

  4. Microsoft が何strncpy_s(strbuf, strbuf, ...)か非常に奇妙なことをしていない限り、ここでは、ソースと宛先の両方に同じ文字列を指定することはできません。

  5. strtol()よりこちらの方が良いですatoi()

  6. 開いているファイルを閉じたり、実際に開いたかどうかを確認したりしていません。&ここで演算子を使用することerrorCode=fopen_s(&foo, ...は非常に疑わしいですが、ここでも非標準関数を使用しているため、誰にもわかりません。

  7. ここでは、 2 つの s を期待するようにfprintf(fooo,"s%d= %d\n", ss, numb)指示していますが、最後の引数は配列です。fprintf()int

于 2013-09-22T20:03:32.547 に答える