01/10/2018, 01:12

Gặp lỗi này là sao ạ?

lỗi ngay dòng fscanf_s(input,"%s",&tmp);
em đọc chuỗi thì bị lỗi này, kể cả đọc trực tiếp hay gián tiếp, fgets cũng lỗi. Lỗi này là do đâu ạ ?

Tuan Tran viết 03:17 ngày 01/10/2018

Thử bỏ & ở dòng lỗi đi xem tn!

Hoang Kien viết 03:16 ngày 01/10/2018

thử sửa xem sao

for(int i=0; i<numName; i++)
Chicken_Rookie viết 03:25 ngày 01/10/2018

Vẫn chưa sửa được ạ.

Mai Hữu viết 03:28 ngày 01/10/2018

code đâu.đưa lên mới giúp dc chứ

Chicken_Rookie viết 03:16 ngày 01/10/2018

đây ạ

// YCBT : Cho truoc mot bang ten, sau do cho query, moi query la mot ten
// Ta can tim vi tri cua query trong bang ten (x) 
// Moi ten gom cac chu cai IN HOA , cach tinh gia tri moi ten : Vd: ABCD => 1+2+3+4=10 (y)
// Ket qua = x*y

#include <stdio.h>
#include <string.h>
char name[5200][15] = {};
int numName;
int binarySearch(char*);
int main()
{
	int query,length;
	char tmp[15] = {};

	FILE*input, *output;
	errno_t in, out;

	in = fopen_s(&input, "Input.txt", "r");
	out = fopen_s(&output, "Output.txt", "w");

	fscanf_s(input, "%d", &numName);
	//fflush(stdin);


	//Doc list ten
	for (int i = 1; i <= numName; i++)
	{
		fscanf_s(input, "%s", &tmp);
		length = strlen(tmp);
		for (int j = 0; j < length; j++) name[i][j] = tmp[j];
	}

	fscanf_s(input, "%d", &query);
	for (int i = 1; i <= query; i++)
	{
		
		int posInName,sum=0;
		fscanf_s(input, "%s", &tmp);
		posInName = binarySearch(tmp); //Tim vi tri cua tmp trong name
	
		for (int j = 0; j < length; j++) sum += tmp[j] - 64;  //Vi trong ASCII chu A co gia tri 65 => can tru 64 de tro ve vi tri 1
		fprintf(output, "%d\n", posInName*sum);
	}

	in = fclose(input);
	out = fclose(output);
	return 0;
}
int binarySearch(char*tmp)
{
	for (int i = 1; i <= numName; i++)
	{
		if (strcmp(tmp, name[i]) == 0) return i;
	}
}
Chicken_Rookie viết 03:14 ngày 01/10/2018

Input

5
ALEX
LUIS
JAMES
BRIAN
PAMELA
1
PAMELA

Output
240

rogp10 viết 03:23 ngày 01/10/2018

FEFEFEFE hình như là bẫy lỗi. Xem lại xem có add file input vào project chưa.

Trương Quang Nội viết 03:15 ngày 01/10/2018
char tmp[15]; 
  • bản chất xâu tmp là 1 mảng các char vì thế tmp là con trỏ trỏ tới mảng đó.
  • hàm scanf_s của bạn dùng có chỗ truyền vào tham số “%s” thì phía sau phải con là con trỏ đến mảng chứa xâu s. vì thế bạn chỉ cần truyền vào tmp chứ không phải &tmp như trong code của bạn. Mình nghĩ lỗi do đó thôi:
 fscanf_s(input, "%s", tmp);
Chicken_Rookie viết 03:19 ngày 01/10/2018

Mình thử sửa lại rồi nhưng vẫn lỗi y như vậy . Dù sao cũng cảm ơn bạn

Chicken_Rookie viết 03:13 ngày 01/10/2018

Là sao ạ? kiểm tra add như thế nào ạ ?

Chicken_Rookie viết 03:20 ngày 01/10/2018

Mình đã tìm ra cách sửa, câu lệnh đúng sẽ là : fscanf_s(input, "%s", tmp,sizeof tmp);. Nhưng mình thắc mắc tại sao phải thêm tham số như vậy ? Có bạn nào biết, giải thích giúp mình với.

rogp10 viết 03:28 ngày 01/10/2018

Lưu ý fscanf_s là hàm không chuẩn. Đổi qua gcc là thấy ngay

Các hàm có đuôi _s thì cần thêm số kí tự hay số byte.

Bài liên quan
0