X



C言語なら俺に聞け 145
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん (ワッチョイ 9381-qput)
垢版 |
2018/02/19(月) 22:13:58.98ID:9/te2eSJ0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


C言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0854デフォルトの名無しさん (アウアウカー Sa47-p2KG)
垢版 |
2018/04/18(水) 11:16:51.20ID:gg2GabAwa
プログラムを動かすボードが貧弱でも開発は豪華なPCでやるんだから最低でもアセンブラ使えるようにはするだろう。
作ったばかりのCPUで他のCPUとの互換性が全くなくアセンブラもまだない、なんていう特殊な状況でない限りは。
0857デフォルトの名無しさん (アウアウカー Sa47-p2KG)
垢版 |
2018/04/18(水) 12:57:38.66ID:gg2GabAwa
mount /dev/sda
0859デフォルトの名無しさん (ワッチョイ e39f-ycE0)
垢版 |
2018/04/18(水) 23:58:14.05ID:BI6oaZDa0
この頃は組み込みって言っても Linux が動いちゃうような小さいボードあるしな。
SDメモリに平気で何Gもデータ入れちゃったりもできるし。なんとういか、時代は変わったよな。
昔は2KBと4KBのROMに詰め込むためにビット単位で削っていたもんな。
0861850 (ワッチョイ b7bd-9jjH)
垢版 |
2018/04/19(木) 05:33:01.08ID:IwtdBTTY0
なんかネタレスで返されてるな
とあるLEDアレイの案件では並列に重きを置き
CPUあたりの処理能力は思いっきり低い
なんてのがあったんだが
0862デフォルトの名無しさん (アウアウカー Sa43-9Dln)
垢版 |
2018/04/19(木) 12:39:01.79ID:oHD1faOFa
あまりに面倒ならハードウェアで回路追加して解決
0864デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/19(木) 23:07:31.74ID:p3OUOmjs0
int a[] = {0,1,2,3};
char b =0;
scanf("%d",&b);

printf("%d",a[b]);
知恵袋でこんな質問があって俺も不思議に思って持ってきたんだけど
色んな数字入れても0になるとか書かれてたんだけどこれどうなってるの?
0866デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/19(木) 23:21:55.11ID:p3OUOmjs0
>>865
100入れてみたら3が返ってきたw
0868デフォルトの名無しさん (ワッチョイ 83b3-sFFS)
垢版 |
2018/04/19(木) 23:23:39.27ID:XF7JHHHf0
エンディアンによるような気もするがー

%d は int の大きさを持った器のポインタを要求してるのに
char の大きさの器を渡してるから どうなろうがしったこっちゃない鼻から悪魔系の動作
0869デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/19(木) 23:29:53.26ID:p3OUOmjs0
これがエラーにならず動いてしまうという悪魔のCの動作か
0888デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/20(金) 14:21:22.42ID:33OB1hDw0
char *line;
scanf("%s", &line);//dogが入る
if(line=="dog")
{
printf("dogですよ");
}
これってなんでdogと合わないん?
0894デフォルトの名無しさん (ワッチョイ 4eea-sFFS)
垢版 |
2018/04/20(金) 15:20:02.90ID:JZAZQDTS0
>char *line;
>scanf("%s", &line);
この2行に色々な罠や誤りが仕込まれてるな。
Cで躓くであろう、ポインタと配列、文字と文字列周辺


(セキュリティや入力のオーバーランは考慮せず簡便なので書くと)
char line[256];
scanf("%s", line);
0895デフォルトの名無しさん (アウアウカー Sa43-9Dln)
垢版 |
2018/04/20(金) 17:03:59.70ID:OzeM0EoQa
>>888
どこから突っ込んでいいかわからない。
今は出先でスマホから見てるので書くのが面倒だが、多分明日までには他の人が沢山ツッコミを入れている事だろう。
0899デフォルトの名無しさん (ワッチョイ 76e7-l7dU)
垢版 |
2018/04/20(金) 18:02:13.70ID:rQE2Qud50
これでもし入力条件が不明の長さで受け取らなきゃ行けなかったらどうすればいい?
0903デフォルトの名無しさん (アウアウカー Sa43-9Dln)
垢版 |
2018/04/20(金) 18:40:42.36ID:dyY1ZlsFa
gccならgetline()
0904片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3)
垢版 |
2018/04/20(金) 18:44:42.17ID:PF4NyNv9d
入力バッファにちょっとゴミが混じるだけでscanfは使えなくなる。
そんな役立たずは、業務では使うべきではない。使うなら、fgetsとsscanfの方がいい。
我が国のコンピューター教育は残念ながら、業務では役に立たない言語を教えている。
0907デフォルトの名無しさん
垢版 |
2018/04/20(金) 19:55:43.39
>>906
Python
0910デフォルトの名無しさん (アウアウウー Sa47-9jjH)
垢版 |
2018/04/20(金) 21:04:02.42ID:qDS4Ifrca
>>905
心配しなくても使われる所は限られてるよ。
OSそのものとかデバイスドライバとかな。
それも減りつつあるんじゃないかな。
まあしかし過去の資産がありすぎて捨てられないって感じか。
うまいこと互換性を保ちつつ次の段階へ行ければいいんだろうけどね。
0913デフォルトの名無しさん (ワッチョイ b39f-9jjH)
垢版 |
2018/04/21(土) 00:13:25.41ID:Oxipuy330
>>901
scanf() の * は・・・
0918デフォルトの名無しさん (ワッチョイ 5fab-9jjH)
垢版 |
2018/04/21(土) 15:05:42.05ID:WYiI1Hbl0
入力された文字列(例えば10文字程度)を、
数字だけ*に変えるプログラムを作りたいと思ってるんですが、
どうもうまく行きません
どなたか簡単なコード書いてくれませんか
0919デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:31:16.54
>>918
数字は半角の「*」でいいの?
それとも全角の「*」?
それによって処理の複雑さが変わる
0920デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:32:52.02
ああ、あと入力された文字列にはマルチバイト文字が含まれるのか、1バイト文字なのかも明確にしとかないとな
0923デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:45:37.64
入力部分には>>897を使わせてもらった

#include <stdio.h>
#include <string.h>

void mask_num(char *s)
{
char *c;
for (c = &s[0]; *c != '¥0'; c++)
{
if (*c > '0' && *c < '9') *c = '*';
}
}

int main()
{
char line[64];
fgets(line, sizeof(line), stdin);
strtok(line, "¥n");
mask_num(line);
printf("%s¥n", line);
return 0;
}
0925デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:49:15.15
>>923
>if (*c > '0' && *c < '9') *c = '*';

if (*c >= '0' && *c <= '9') *c = '*';

だった
0926デフォルトの名無しさん
垢版 |
2018/04/21(土) 15:51:21.42
>>918
を見て「*」を「*」に勝手に読みかえるようじゃ
受け入れ試験時で不具合が見つかって大幅手戻りが発生するぞ
0928デフォルトの名無しさん (ワッチョイ b39f-9jjH)
垢版 |
2018/04/21(土) 16:17:22.90ID:Oxipuy330
入力して変換して出力するだけでいいならこうかな。

#include <stdio.h>
#include <ctype.h>

int main()
{
 int c;

 while ((c = getchar()) != EOF)
  if (isdigit(c))
   putchar('*');
  else
   putchar(c);

 return 0;
}
0929デフォルトの名無しさん (ワッチョイ 2393-MaWf)
垢版 |
2018/04/21(土) 17:23:05.22ID:2bKzbSLP0
>>926
しかしながら「数字を*に変えるプログラム組んどきましたよ」と言って
本当にASCIIの '*' でなくマルチバイトの "*" に変える処理だったら
発注側から「普通全角はないだろ、お前さん常識ないのか?」と
発言者にとって都合の良い「普通」「常識」の波状攻撃を受けるハメに。

その意味で >>919>>920 の態度は正しい。
世の中には自分のミスを認めたくない人もいるけどな。
0930デフォルトの名無しさん (ワッチョイ 9ab3-cuLp)
垢版 |
2018/04/21(土) 18:01:42.48ID:bgp2zzOH0
今回の発注者は>>918だから注意喚起として * じゃないの?
って確認するのは正しいけど全角半角言うならむしろ数字と言うのが半角だけでいいのかを確認した方がいいかと
下手すると 壱萬弐仟参佰四拾伍 が変換されてないじゃないかとか言われるかも知れんし
0933918 (ワッチョイ 5fab-9jjH)
垢版 |
2018/04/22(日) 06:45:30.49ID:5hVlVxZz0
すいません遅れました
添削おねがいします

#include <stdio.h>
void num_star(char *p)
{
while (*p)
if(*p >= '0' && *p <= '9')
*p++ = '*';
}
int main(void)
{
char ch[10];
printf("文字列を入力せよ\n");
scanf("&s",ch);
num_star(ch);
printf("%s\n", ch);

return 0;
}
0935デフォルトの名無しさん (ワッチョイ b39f-+Fe+)
垢版 |
2018/04/22(日) 13:47:43.90ID:J/MYnpG10
数字以外の文字だけ入力されたら無限ループになって終わらないね。
0936デフォルトの名無しさん (スプッッ Sd5a-Incm)
垢版 |
2018/04/22(日) 13:59:28.07ID:1MVwzpIAd
>>934
関数コールは遅いしサイズも増える
標準ライブラリを全てリンクしてるかわからない

わざわざC言語を使う場面ていうのは
そういうことも多少は心配した方が良いこともある
0937 ◆QZaw55cn4c (ワッチョイ ba60-Mp6C)
垢版 |
2018/04/22(日) 14:04:21.13ID:bjDlbJPk0
>>936
>標準ライブラリを全てリンクしてるかわからない
必要なものをリンクすればいいし、必要なものをリンクするように出来ているのでは?
0940デフォルトの名無しさん (ワッチョイ b704-9jjH)
垢版 |
2018/04/22(日) 14:38:15.31ID:cFbiqY2T0
>>936
> 標準ライブラリを全てリンクしてるかわからない
リンク? インプリメントの間違いだろ
何をリンクして何をリンクしないのかは
組み込みでは厳密に指定し結果も確認する

isdigitにはマクロバージョンもある
おそらくお前さんはそんなん知らんと言うだろうな

総じて、現物のコンパイラを細かくいじるということをせずに
上っ面だけ使って満足している手合いか
0943デフォルトの名無しさん
垢版 |
2018/04/22(日) 15:27:22.65
>>940
isdigitの指す文字が’0’〜’9’だけとも限らないからな(事実上は問題にならないとしても)
0947デフォルトの名無しさん (ドコグロ MMba-cuLp)
垢版 |
2018/04/22(日) 17:59:29.92ID:rTRuhMGrM
>>946
X 3010:2003 (ISO/IEC 9899:1999)
5.2.1文字集合
ソース基本文字集合及び実行基本文字集合の双方において,10 進数字に関する上の並びにおいて,0 の右側に並んでいる各文字の値は,一つ左側にある文字の値に比べ 1 だけ大きくなければならない。
0950 ◆QZaw55cn4c (ワッチョイ ba60-Mp6C)
垢版 |
2018/04/22(日) 19:16:00.91ID:bjDlbJPk0
>>949
「0 の右側に並んでいる各文字の値は,一つ左側にある文字の値に比べ 1 だけ大きく」なっていない文字集合は思いつけませんね…
ftp%3A//ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00037.pdf
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況