C言語のcanf()関数を2回(以上)連続で使用に
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
static char ad[10];
int cmp_u(const void* a, const void* d) {
return strcmp((char*)a, (char*)d);
}
int cmp_d(const void* a, const void* d) {
return strcmp((char*)d, (char*)a);
}
int main() {
int num1, num2;
char op;
float answer;
int r,i;
FILE* fp;
char e[11];
char sin[1000][1000];
char ad[8];
fp = fopen("log.txt", "a+");
if (fp == NULL) {
printf("ファイルオープン失敗\n");
return -1;
}
while (1) {
r = scanf("%d%c%d", &num1,&op, &num2);
if (r != 3) {
puts("input error");
return 1;
}
if (op == '+') {
answer = num1 + num2;
}
else if (op == '-') {
answer = num1 - num2;
}
else if (op == '*') {
answer = num1 * num2;
}
else if (op == '/') {
answer = (float)num1 / num2;
}
time_t t = time(NULL);
struct tm* tm = localtime(&t);
printf("%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
printf("%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec);
printf("%d%c%d,%f\n", num1, op, num2, answer);
fprintf(fp, "%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
fprintf(fp, "%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec);
fprintf(fp, "%d%c%d,%f\n", num1, op, num2, answer);
printf("計算を続けますか?");
scanf("%s\n", &e);
if (strcmp(e, "no") == 0) {
break ;
}
}
fclose(fp);
fp = fopen("log.txt", "r");
int cnt = 0;
for (i = 0;i < 1000;i = i + 1) {
if (fgets(sin[i], sizeof(sin[0]), fp))
++cnt;
else
break;
}
fclose(fp);
printf("ASC or DESC: ");
scanf("%s", ad);
if (strcmp(ad, "ASC") == 0) {
qsort(sin, cnt, sizeof(sin[0]), cmp_u);
}
else {
qsort(sin, cnt, sizeof(sin[0]), cmp_d);
}
for (i = 0;i < cnt;i = i + 1) {
printf("%s", sin[i]);
}
return 0;
}
現在こちらのコードを書いたのですが、scanfを連続使用しているのが原因で
printf("ASC or DESC: ");
scanf("%s", ad);
この部分で入力できずに進行してしまいます。
こちらのサイトを
http://freeh.minim.ne.jp/minimini/develop/cscanf.html#:~:text=C%3A%20scanf%28%29%E9%96%A2%E6%95%B0%E3%81%AE%E9%80%A3%E7%B6%9A%E4%BD%BF%E7%94%A8%E3%81%AF%E6%B3%A8%E6%84%8F.%20scanf%28%29%E9%96%A2%E6%95%B0%E3%82%92%EF%BC%92%E5%9B%9E%EF%BC%88%E4%BB%A5%E4%B8%8A%EF%BC%89%E9%80%A3%E7%B6%9A%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%80%81%E6%84%8F%E5%9B%B3%E3%81%97%E3%81%AA%E3%81%84%E5%8B%95%E4%BD%9C%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82.%20scanf%28%29%E9%96%A2%E6%95%B0.%20scanf%28%29%E9%96%A2%E6%95%B0%E3%81%AF%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E9%96%A2%E6%95%B0%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%EF%BC%92%E5%9B%9E%E9%80%A3%E7%B6%9A%E3%81%A7%E4%BD%BF%E3%81%86%E3%81%A8%E3%80%81%EF%BC%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%8C%E6%84%8F%E5%9B%B3%E3%81%97%E3%81%9F%E9%80%9A%E3%82%8A%E3%81%AB%E3%81%AF%EF%BC%89%E3%81%86%E3%81%BE%E3%81%8F%E5%8B%95%E3%81%84%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82.%20char%20c%2C%20%2Astr%3B%0A%0A,%20printf%28%22%E6%96%87%E5%AD%97%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%3A%20%22%29%3B%0A%20%20scanf%28%22%25c%22%2C%20%26c%29%3B%0A.%20%E3%81%93%E3%82%8C%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%80%81%E4%BE%8B%E3%81%88%E3%81%B0%E3%80%8Cabc%E3%80%8D%E3%81%A8%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%A6%E3%83%AA%E3%82%BF%E3%83%BC%E3%83%B3%E3%82%AD%E3%83%BC%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82.%20%E3%81%99%E3%82%8B%E3%81%A8%EF%BC%92%E3%81%A4%E7%9B%AE%E3%81%AEscanf%28%29%E9%96%A2%E6%95%B0%E3%81%A7%E6%AD%A2%E3%81%BE%E3%82%89%E3%81%9A%E3%81%AB%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E9%80%B2%E3%82%93%E3%81%A7%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%99%E3%80%82.
参考に色々と試してみたのですが上手くいかず、どなたか修正方法を教えて頂けないでしょうか